3

私は3つのラジオボタンを持っています。このラジオボタンを使って私は自分の結果をフィルタリングしています。私がラジオボタンを選択したときに私のアプリがクラッシュしました

2つ以上のラジオボタンが正常に機能していますが(RB2とRB3)、RB3(DATE-WISE)を選択するとアプリケーションがクラッシュしました。

final RadioGroup rgroup = (RadioGroup)findViewById(R.id.radioType); 
     final RadioButton Ta = (RadioButton)findViewById(R.id.type_a); 
     final RadioButton Tb = (RadioButton)findViewById(R.id.type_b); 
     final RadioButton Tc = (RadioButton)findViewById(R.id.type_c); 
     rgroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()  { 
      @Override 
      public void onCheckedChanged(RadioGroup group, int checkedId) { 
       if (rgroup.getCheckedRadioButtonId() == Ta.getId()) { 
        cus_names = listItems.get(cus_name.getSelectedItemPosition()); 
        btn1.setVisibility(View.VISIBLE); 
        btn2.setVisibility(View.VISIBLE); 
        created_date1.setVisibility(View.VISIBLE); 
        created_date2.setVisibility(View.VISIBLE); 
        cus_name.setVisibility(View.GONE); 
        po_id.setVisibility(View.GONE); 
       } 
       else if (rgroup.getCheckedRadioButtonId() == Tb.getId()) { 
        cus_name.setSelection(0); 
        cus_name.setVisibility(View.VISIBLE); 
        btn1.setVisibility(View.GONE); 
        btn2.setVisibility(View.GONE); 
        created_date1.setVisibility(View.GONE); 
        created_date2.setVisibility(View.GONE); 
        po_id.setVisibility(View.GONE); 
       } 
       else if (rgroup.getCheckedRadioButtonId() == Tc.getId()) { 
        po_id.setSelection(0); 
        po_id.setVisibility(View.VISIBLE); 
        btn1.setVisibility(View.GONE); 
        btn2.setVisibility(View.GONE); 
        created_date1.setVisibility(View.GONE); 
        created_date2.setVisibility(View.GONE); 
        cus_name.setVisibility(View.GONE); 
       } 
      } 
     }); 

マイLogcat:

07-28 11:47:53.243 13244-13244/com.example.Minal E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.example.Minal, PID: 13244 
java.lang.ArrayIndexOutOfBoundsException: length=0; index=-1 
    at java.util.ArrayList.get(ArrayList.java:310) 
    at com.example.Minal.Purchase_Pending$1.onCheckedChanged(Purchase_Pending.java:180) 
    at android.widget.RadioGroup.setCheckedId(RadioGroup.java:173) 
    at android.widget.RadioGroup.-wrap0(RadioGroup.java) 
    at android.widget.RadioGroup$CheckedStateTracker.onCheckedChanged(RadioGroup.java:351) 
    at android.widget.CompoundButton.setChecked(CompoundButton.java:159) 
    at android.widget.CompoundButton.toggle(CompoundButton.java:115) 
    at android.widget.RadioButton.toggle(RadioButton.java:76) 
    at android.widget.CompoundButton.performClick(CompoundButton.java:120) 
    at android.view.View$PerformClick.run(View.java:21147) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+2

'cus_name.getSelectedItemPosition()'が負の1を返し、あなたのリストは空です。 2つの問題があります –

+1

cus_names = listItems.get(cus_name.getSelectedItemPosition());あなたのlistItemsのサイズを確認してください – Pavya

+0

はい私のリストは空ですあなたは右@ @ cricket_007、私のデータベースにはデータがないため。どのようにこのような状況を処理するのですか? – AndroidBoy

答えて

1

あなたは空のリストを取得するたびので、それはあなたのアプリケーションがクラッシュします、間違った位置にラインの下に書かれている、

cus_names = listItems.get(cus_name.getSelectedItemPosition()); 

ので、コードの下にしてみてくださいonlele以外の3つの条件すべてについて、

if(listItmes != null & listItems.size() > 0) 
     cus_names = listItems.get(cus_name.getSelectedItemPosition()); 
+0

ArrayIndexOutOfBoundsException:length = 0; **インデックス= -1 **彼のcus_nameはデータを持っていないので、何も変更されません – AxelH

+0

働く人@Vickyexpert(パーフェクトな名前)、ありがとう – AndroidBoy

+0

ありがとう..あなたのコーディングをお楽しみください... – Vickyexpert

2

あなたのケースでは理由がcus_name.getSelectedItemPosition()リターン-1(それはあなたのlistItemのインデックスではない)であり、あなたのListItemサイズが0
あるので、あなたが防止ArrayIndexOutOfBoundsException

if(cus_name.getSelectedItemPosition() > -1 && cus_name.getSelectedItemPosition() < listItems.size()){ 
     cus_names = listItems.get(cus_name.getSelectedItemPosition()); 
} 

等の値を取得する前にそれの両方をチェックする必要があります

希望のヘルプ

+0

私はチェックすることができます> 0または-1どちらが正しいのでしょうか?私は-1が良いと思いますか? – AndroidBoy

+1

私はあなたのためにいくつかの場合があります。 'あなたのリストには0アイテムとcus_name.getSelectedItemPosition()= -1(偽) を持っている - (1つの項目とcus_name.getSelectedItemPositionを持っているあなたのリスト - あなたのリストには0アイテムとcus_name.getSelectedItemPosition()= 1(偽) を持っています)= -1(偽) - あなたのリストには1つのアイテムがあり、cus_name.getSelectedItemPosition()= 1(偽) リストにはアイテムが1つあり、cus_name.getSelectedItemPosition()= 0(true) ' –

+0

-1 \ – AndroidBoy

関連する問題