2016-07-28 109 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

相关问题