2014-11-16 30 views
0

我有一个简单的代码实现了RadioGroupButton和CheckBox。Android NullPointerException:空对象上的java.lang.widget.RadioButton.getId()引用

当模拟器上启动应用程序时,没有例外,但是当我单击单选按钮时,它抛出异常,我注意到从LogCat中,有一个空对象引用调用getId()导致的此NullPointerException。

我已经检查过我的代码,我失去了为什么会发生异常。 这是我的代码,请给予帮助,非常感谢!

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.widget.RadioGroup; 
import android.widget.RadioButton; 
import android.widget.RadioGroup.OnCheckedChangeListener; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.Toast; 

public class MainActivity extends ActionBarActivity { 
private RadioGroup GenderGroup; 
private RadioButton rbMale; 
private RadioButton rbFemale; 
private CheckBox cbFootball; 
private CheckBox cbBasketball; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    GenderGroup = (RadioGroup)super.findViewById(R.id.gender); 

    rbMale = (RadioButton)super.findViewById(R.id.male); 
    rbMale = (RadioButton)super.findViewById(R.id.female); 
    //System.out.printf("rbMale = %@", rbMale); 
    //System.out.printf("rbFemale = %@", rbFemale); 
    cbFootball = (CheckBox)super.findViewById(R.id.football); 
    cbBasketball = (CheckBox)super.findViewById(R.id.basketball); 

    // register OnCheckedChangeListener event: 
    GenderGroup.setOnCheckedChangeListener(new GenderOnCheckedChangeListener()); 

    cbFootball.setOnCheckedChangeListener(new FootballOnCheckedChangeListener()); 

    cbBasketball.setOnCheckedChangeListener(new BasketballOnCheckedChangeListener()); 



} 

private class GenderOnCheckedChangeListener implements OnCheckedChangeListener { 

    @Override 
    public void onCheckedChanged(RadioGroup group, int checkedId) { 
     String sGender = ""; 

     if (checkedId == rbFemale.getId()) { 

      sGender = rbFemale.getText().toString(); 
     } 

     if (checkedId == rbMale.getId()) { 

      sGender = rbMale.getText().toString(); 
     } 

     Toast.makeText(getApplicationContext(), "Your gender is :" + sGender, Toast.LENGTH_SHORT).show(); 

    } 

} 

private class FootballOnCheckedChangeListener implements CompoundButton.OnCheckedChangeListener { 

    @Override 
    public void onCheckedChanged(CompoundButton button, boolean isChecked) { 
     String sFav = ""; 
     if (cbFootball.isChecked()) { 

      sFav = cbFootball.getText().toString(); 
      sFav = sFav + "selected!"; 
     } 
     else { 

      sFav = sFav + "not selected!"; 

     } 

     Toast.makeText(getApplicationContext(), "Your favourite is: " + sFav, Toast.LENGTH_SHORT).show(); 
    } 

} 



private class BasketballOnCheckedChangeListener implements CompoundButton.OnCheckedChangeListener { 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, 
      boolean isChecked) { 

     String sFav = ""; 
     if (cbBasketball.isChecked()) { 

      sFav = cbBasketball.getText().toString(); 
      sFav = sFav + "selected!"; 
     } 
     else { 

      sFav = sFav + "not selected!"; 
     } 

     Toast.makeText(getApplicationContext(), "Your favourite is: " + sFav, Toast.LENGTH_SHORT).show(); 
    } 

} 

} 

对不起,我还是新鲜的男人在这里,不能粘贴图片。

回答

0

更换第二rbMale你没有初始化rbFemale。可能是复制粘贴错误。使用这个:

rbMale = (RadioButton)super.findViewById(R.id.male); 
rbFemale = (RadioButton)super.findViewById(R.id.female); 
+1

谢谢,我很愚蠢,我的手指没有按照我的想法。 –

0

你应该rbFemale

rbMale = (RadioButton)super.findViewById(R.id.male); 
rbMale = (RadioButton)super.findViewById(R.id.female); 
+0

谢谢,这是根本原因! –

相关问题