2016-07-28 107 views
3

我有3個單選按鈕每個單選按鈕做一些執行,使用此單選按鈕我篩選我的結果例如RB1的DATE-WISE RB2的客戶名和RB3的Productname。當我選擇單選按鈕我的應用程序崩潰

上面兩個單選按鈕工作正常(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並且你的列表是空的。有兩個問題 –

+1

cus_names = listItems.get(cus_name.getSelectedItemPosition());檢查你的listItems的大小 – Pavya

+0

是的我的清單是空的你右@ cricket_007,因爲我沒有數據在我的數據庫。如何處理這種情況? – AndroidBoy

回答

1

你已經寫了下面一行在錯誤的位置上,所以每當你會得到空列表它會崩潰您的應用程序,

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

那麼試試下面的代碼對於所有三種情況不在onle,

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

ArrayIndexOutOfBoundsException:length = 0; ** index = -1 **他的cus_name沒有選擇,所以有數據或不會改變任何東西 – AxelH

+0

其工作Man @Vickyexpert(Perfect name),謝謝 – AndroidBoy

+0

謝謝..享受您的編碼... – Vickyexpert

2

你的情況的原因是cus_name.getSelectedItemPosition()返回-1(這是不是你的listItem的指數)和你的listItem大小爲0
所以,你應該像

if(cus_name.getSelectedItemPosition() > -1 && cus_name.getSelectedItemPosition() < listItems.size()){ 
     cus_names = listItems.get(cus_name.getSelectedItemPosition()); 
} 
爲防止 ArrayIndexOutOfBoundsException檢查兩者之前獲得價值

希望得到這個幫助

+0

我可以檢查> 0或-1哪一個是對的?我認爲-1更好? – AndroidBoy

+1

我有些情況給你。您的清單有0項目和cus_name.getSelectedItemPosition()= 1(false) - 您的清單有1項目和cus_name.getSelectedItemPosition() )= -1(false) - 你的列表有1項和cus_name.getSelectedItemPosition()= 1(false) 你的列表有1項和cus_name.getSelectedItemPosition()= 0(true)' –

+0

所以我打算使用-1 \ – AndroidBoy

相關問題