2014-11-16 32 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

謝謝,這是根本原因! –

相關問題