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

да мой список пуст вам Right @ cricket_007, потому что у меня нет данных в моей базе данных. Как справиться с такой ситуацией? – AndroidBoy

ответ

1

Вы написали ниже линии в неправильном положении, так что всякий раз, когда вы получите пустой список это приведет к сбою приложения,

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

Так что попробуйте ниже код для всех трех условий, не входящих в состав,

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

ArrayIndexOutOfBoundsException: length = 0; ** index = -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 (ложь) - ваш список есть 0 товара и cus_name.getSelectedItemPosition() = 1 (ложь) - список есть 1 пункт и cus_name.getSelectedItemPosition () = -1 (false) - ваш список содержит 1 элемент и cus_name.getSelectedItemPosition() = 1 (false) ваш список содержит 1 элемент и cus_name.getSelectedItemPosition() = 0 (true) ' –

+0

, поэтому я собираюсь использовать -1 \ – AndroidBoy

Смежные вопросы