2015-05-12 6 views
0

Я пытаюсь получить значения всех выбранных радиокнопки на нажатие кнопки Submit, но я получаю исключение NullPointer в строке:Ошибка при получении значения выбранных кнопок RADIO

String selection = (String) btn.getText(); 

Ошибка:

05-12 12:54:52.261: E/AndroidRuntime(14113): FATAL EXCEPTION: main 
05-12 12:54:52.261: E/AndroidRuntime(14113): Process: com.androidhub4you.multilevellistview, PID: 14113 
05-12 12:54:52.261: E/AndroidRuntime(14113): java.lang.NullPointerException 
05-12 12:54:52.261: E/AndroidRuntime(14113): at com.androidhub4you.multilevellistview.MainActivity$5.onClick(MainActivity.java:249) 
05-12 12:54:52.261: E/AndroidRuntime(14113): at android.view.View.performClick(View.java:4456) 
05-12 12:54:52.261: E/AndroidRuntime(14113): at android.view.View$PerformClick.run(View.java:18465) 
05-12 12:54:52.261: E/AndroidRuntime(14113): at android.os.Handler.handleCallback(Handler.java:733) 
05-12 12:54:52.261: E/AndroidRuntime(14113): at android.os.Handler.dispatchMessage(Handler.java:95) 
05-12 12:54:52.261: E/AndroidRuntime(14113): at android.os.Looper.loop(Looper.java:136) 
05-12 12:54:52.261: E/AndroidRuntime(14113): at android.app.ActivityThread.main(ActivityThread.java:5086) 
05-12 12:54:52.261: E/AndroidRuntime(14113): at java.lang.reflect.Method.invokeNative(Native Method) 
05-12 12:54:52.261: E/AndroidRuntime(14113): at java.lang.reflect.Method.invoke(Method.java:515) 
05-12 12:54:52.261: E/AndroidRuntime(14113): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
05-12 12:54:52.261: E/AndroidRuntime(14113): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
05-12 12:54:52.261: E/AndroidRuntime(14113): at dalvik.system.NativeStart.main(Native Method) 

ВВЕСТИ кОД КНОПКИ:

submitbutton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if(radioGroup.getCheckedRadioButtonId()!=-1){ 
        String selection = btn.getText().toString(); 
        Toast.makeText(getApplicationContext(), "You are submitting : " + selection, Toast.LENGTH_LONG).show(); 
       } 

      } 
     }); 

Полный код:

public class MainActivity extends Activity { 

    private ArrayList<Product>pProductArrayList; 
    private ArrayList<SubCategory>pSubItemArrayList; 
    private ArrayList<SubCategory>pSubItemArrayList2; 
    private LinearLayout mLinearListView; 
    boolean isFirstViewClick=false; 
    boolean isSecondViewClick=false; 
    RadioButton rdbtn; 
    private RadioGroup radioGroup; 
    private RadioButton btn; 
    private Button submitbutton; 
    private String[] shownames = {"AA", "BB", "CC"};            //Dynamic Show Names 
    private String[] application = {"DD", "EE", "FF", "GG"};     //Dynamic Application Names 
    private String[] device = {"HH", "II", "JJ", "KK"};            //Dynamic Device Names 
    private String text1; 
    private String text2; 
    private LayoutInflater inflater3; 
    private LayoutInflater inflater4; 
    private View mLinearView3; 
    private View mLinearView4; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mLinearListView = (LinearLayout) findViewById(R.id.linear_listview); 

     submitbutton = (Button)findViewById(R.id.submitbutton); 

     ArrayList<ItemList> mItemListArray=new ArrayList<ItemList>(); 
     mItemListArray.add(new ItemList("", "")); 

     ArrayList<ItemList> mItemListArray2=new ArrayList<ItemList>(); 
     mItemListArray2.add(new ItemList("", "")); 

     pSubItemArrayList=new ArrayList<SubCategory>(); 
     pSubItemArrayList2=new ArrayList<SubCategory>(); 

     pSubItemArrayList.add(new SubCategory("Select Application/Device", mItemListArray));          //Static Header 
     pSubItemArrayList2.add(new SubCategory("Select Device", mItemListArray2));             //Static Header 

     pProductArrayList=new ArrayList<Product>(); 

     for (int i = 0; i < shownames.length; i++){ 
      pProductArrayList.add(new Product(shownames[i], pSubItemArrayList)); 
     } 

     for (int i = 0; i < pProductArrayList.size(); i++) { 

      LayoutInflater inflater = null; 
      inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View mLinearView = inflater.inflate(R.layout.row_first, null); 

      final TextView mProductName = (TextView) mLinearView.findViewById(R.id.textViewName); 
      final RelativeLayout mLinearFirstArrow=(RelativeLayout)mLinearView.findViewById(R.id.linearFirst); 
      final ImageView mImageArrowFirst=(ImageView)mLinearView.findViewById(R.id.imageFirstArrow); 
      final LinearLayout mLinearScrollSecond=(LinearLayout)mLinearView.findViewById(R.id.linear_scroll); 

      if(isFirstViewClick==false){ 
      mLinearScrollSecond.setVisibility(View.GONE); 
      mImageArrowFirst.setBackgroundResource(R.drawable.arw_lt); 
      } 

      else{ 
       mLinearScrollSecond.setVisibility(View.VISIBLE); 
       mImageArrowFirst.setBackgroundResource(R.drawable.arw_down); 
      } 

      mLinearFirstArrow.setOnTouchListener(new OnTouchListener() { 

       @Override 
       public boolean onTouch(View v, MotionEvent event) { 

        if(isFirstViewClick==false){ 
         isFirstViewClick=true; 
         mImageArrowFirst.setBackgroundResource(R.drawable.arw_down); 
         mLinearScrollSecond.setVisibility(View.VISIBLE); 

        }else{ 
         isFirstViewClick=false; 
         mImageArrowFirst.setBackgroundResource(R.drawable.arw_lt); 
         mLinearScrollSecond.setVisibility(View.GONE); 
        } 
        return false; 
       } 
      }); 


      final String name = pProductArrayList.get(i).getpName(); 
      mProductName.setText(name); 

      /** 
      * 
      */ 
      for (int j = 0; j < pProductArrayList.get(i).getmSubCategoryList().size(); j++) { 

       LayoutInflater inflater2 = null; 
       inflater2 = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       View mLinearView2 = inflater2.inflate(R.layout.row_second, null); 

       TextView mSubItemName = (TextView) mLinearView2.findViewById(R.id.textViewTitle); 
       final RelativeLayout mLinearSecondArrow=(RelativeLayout)mLinearView2.findViewById(R.id.linearSecond); 
       final ImageView mImageArrowSecond=(ImageView)mLinearView2.findViewById(R.id.imageSecondArrow); 
       final LinearLayout mLinearScrollThird=(LinearLayout)mLinearView2.findViewById(R.id.linear_scroll_third); 

       if(isSecondViewClick==false){ 
        mLinearScrollThird.setVisibility(View.GONE); 
        mImageArrowSecond.setBackgroundResource(R.drawable.arw_lt); 
        } 
        else{ 
         mLinearScrollThird.setVisibility(View.VISIBLE); 
         mImageArrowSecond.setBackgroundResource(R.drawable.arw_down); 
        } 

       mLinearSecondArrow.setOnTouchListener(new OnTouchListener() { 

         @Override 
         public boolean onTouch(View v, MotionEvent event) { 

          if(isSecondViewClick==false){ 
           isSecondViewClick=true; 
           mImageArrowSecond.setBackgroundResource(R.drawable.arw_down); 
           mLinearScrollThird.setVisibility(View.VISIBLE); 

          }else{ 
           isSecondViewClick=false; 
           mImageArrowSecond.setBackgroundResource(R.drawable.arw_lt); 
           mLinearScrollThird.setVisibility(View.GONE);  
          } 
          return false; 
         } 
        }); 


       final String catName = pProductArrayList.get(i).getmSubCategoryList().get(j).getpSubCatName(); 
       mSubItemName.setText(catName); 


       for (int k = 0; k < pProductArrayList.get(i).getmSubCategoryList().get(j).getmItemListArray().size(); k++) { 

         inflater3 = null; 
         inflater3 = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
         mLinearView3 = inflater3.inflate(R.layout.row_third, null); 

         radioGroup = (RadioGroup) mLinearView3.findViewById(R.id.myRadioGroup); 

         for(int m=0;m<application.length;m++) { 
           rdbtn = new RadioButton(this); 
           rdbtn.setId(m); 
           rdbtn.setText(application[m]); 
           radioGroup.addView(rdbtn); 
         } 


         radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
           public void onCheckedChanged(RadioGroup mRadioGroup, int checkedId) { 
            for(int i=0; i<mRadioGroup.getChildCount(); i++) { 
             btn = (RadioButton) mRadioGroup.getChildAt(i); 
             int t=mRadioGroup.getId(); 
             System.out.println(t); 

             if(btn.getId() == checkedId) { 
               text1 = btn.getText().toString(); 
               Toast.makeText(getApplicationContext(), "You selected : " + text1 + " from : " + mProductName.getText().toString(), Toast.LENGTH_SHORT).show(); 
               return; 
             } 
            } 
           } 
          }); 

         mLinearScrollThird.addView(mLinearView3); 

       } 


       for (int l = 0; l < pProductArrayList.get(i).getmSubCategoryList().get(j).getmItemListArray().size(); l++) { 

        inflater4 = null; 
        inflater4 = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        mLinearView4 = inflater4.inflate(R.layout.row_third, null); 

        radioGroup = (RadioGroup) mLinearView4.findViewById(R.id.myRadioGroup); 

        for(int m=0;m<device.length;m++) { 
          rdbtn = new RadioButton(this); 
          rdbtn.setId(m); 
          rdbtn.setText(device[m]); 
          radioGroup.addView(rdbtn); 
        } 

        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
          public void onCheckedChanged(RadioGroup mRadioGroup, int checkedId) { 
           for(int i=0; i<mRadioGroup.getChildCount(); i++) { 
            btn = (RadioButton) mRadioGroup.getChildAt(i); 
            int t=mRadioGroup.getId(); 
            System.out.println(t); 

            if(btn.getId() == checkedId) { 
              text2 = btn.getText().toString(); 
              Toast.makeText(getApplicationContext(), "You selected : " + text2 + " from : " + mProductName.getText().toString(), Toast.LENGTH_SHORT).show(); 
              return; 
            } 
           } 
          } 
         }); 

         mLinearScrollThird.addView(mLinearView4); 

       } 

       mLinearScrollSecond.addView(mLinearView2); 

      } 

      mLinearListView.addView(mLinearView); 
     }  

     submitbutton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if(radioGroup.getCheckedRadioButtonId()!=-1){ 
        String selection = btn.getText().toString(); 
        Toast.makeText(getApplicationContext(), "You are submitting : " + selection, Toast.LENGTH_LONG).show(); 
       } 

      } 
     }); 

    } 



} 

ответ

0

Теперь попробуйте следующее: selection = btn.getText(). ToString();

+0

По-прежнему такая же ошибка – Christine

0
private RadioButton btn; 




submitbutton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if(radioGroup.getCheckedRadioButtonId()!=-1){ 
       int id= radioGroup.getCheckedRadioButtonId(); 
       btn = (RadioButton)radioGroup.getChildAt(id); 
       String selection = btn.getText().toString(); 
       Toast.makeText(getApplicationContext(), "You are submitting : " + selection, Toast.LENGTH_LONG).show(); 
      } 


     } 
    }); 
0

Я думаю, что вы делаете слишком много неудобных вещей здесь. Вам просто нужно включить радиокнопку и получить такую ​​строку.

if(radioGroup.getCheckedRadioButtonId()!=-1){ 
         int id= radioGroup.getCheckedRadioButtonId(); 
         RadioButton btn = (RadioButton)radioGroup.findViewById(id);      
         String selection = btn.getText().toString(); 
         Toast.makeText(getApplicationContext(), "You are submitting : " + selection, Toast.LENGTH_LONG).show(); 
        } 

Don't литые Струны удвоена String selection = (String) btn.getText().toString() .... that's неправильно ...

+0

Спасибо @Opiatefuchs - я внес соответствующие изменения, но все же ошибка perist – Christine

+0

вы можете обновить свой код? – Opiatefuchs

+0

Спасибо, я обновил свой код, теперь я могу видеть значение в кнопке отправки TOAST, но это единственное последнее выбранное значение, я думаю, он перезаписывает другие значения, моя реализация динамична, есть ли способ, которым я сохранить сохраненные выбранные значения состояния, а затем вернуть их обратно – Christine

0

Попробуйте позвонить findViewById() без RadioGroup

if(radioGroup.getCheckedRadioButtonId()!=-1) { 
    int ID = radioGroup.getCheckedRadioButtonId(); 
    RadioButton rbSelection = (RadioButton) findViewById(id); 
    String selection = rbSelection.getText().toString(); 
} 

Или, проще говоря,

String selection = (RadioButton) findViewById(radioGroup.getCheckedRadioButtonId())).getText().toString(); 
Смежные вопросы