0

我对 Java/Android 开发非常陌生,我试图让用户检查“男孩”或“女孩”的单选按钮并将其写入,SharedPreferences以便我可以在其他活动中使用它。每当我尝试打开此活动时,但我的应用程序就会崩溃。

public class NewBabyProfile extends Activity {

String GENDER = "Baby1Gender"; 

// SharedPreferences initializations
SharedPreferences babyOneGender = getSharedPreferences(getString(R.string.baby_one_profile), Context.MODE_PRIVATE);
SharedPreferences.Editor editor = babyOneGender.edit();

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

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.new_baby_profile, menu);
    return true;
}

public void onRadioButtonClicked(View genderSelection){
    boolean checked = ((RadioButton) genderSelection).isChecked();

    switch(genderSelection.getId()) {
        case R.id.gender_boy:
            if (checked)
                editor.putString("gender","boy").commit();
            break;

        case R.id.gender_girl:
            if (checked)
                editor.putString("gender","girl").commit();
            break;

    }
}

}
4

3 回答 3

0

您不能在一个类中直接初始化以下两个。

SharedPreferences babyOneGender = getSharedPreferences(getString(R.string.baby_one_profile), Context.MODE_PRIVATE);
SharedPreferences.Editor editor = babyOneGender.edit();

您的 SharedPreferences 初始化应该在 onCreate() 或 onResume() 之类的方法中进行,将其移到 onCreate(Bundle) 中,您的应用程序就不会再次崩溃。还要检查您的 logcat 以自己找出问题 :)

最终代码:-

public class NewBabyProfile extends Activity {

String GENDER = "Baby1Gender"; 

//Global declaration.
SharedPreferences babyOneGender;
SharedPreferences.Editor editor;


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

    //Initializations inside onCreate() so no error.

    babyOneGender = getSharedPreferences(getString(R.string.baby_one_profile), Context.MODE_PRIVATE);
    editor = babyOneGender.edit();


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.new_baby_profile, menu);
    return true;
}

public void onRadioButtonClicked(View genderSelection){
    boolean checked = ((RadioButton) genderSelection).isChecked();

    switch(genderSelection.getId()) {
        case R.id.gender_boy:
            if (checked)
                editor.putString("gender","boy").commit();
            break;

        case R.id.gender_girl:
            if (checked)
                editor.putString("gender","girl").commit();
            break;

    }
}

}
于 2013-10-10T02:07:42.263 回答
0

将 babyOneGender 和编辑器的初始化移至 onCreate:

    SharedPreferences babyOneGender;
    SharedPreferences.Editor editor;

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

        babyOneGender = getSharedPreferences(getString(R.string.baby_one_profile), Context.MODE_PRIVATE);
        editor = babyOneGender.edit();
于 2013-10-10T02:08:47.753 回答
0

尝试这个

SharedPreferences babyOneGender = getApplication().getSharedPreferences(getString(R.string.baby_one_profile), Context.MODE_PRIVATE);
于 2013-10-10T01:31:38.217 回答