有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java基于用户输入在Android中编辑SharedReference

我对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;

    }
}

}

共 (3) 个答案

  1. # 1 楼答案

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

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

    SharedReferences初始化应该在onCreate()或onResume()之类的方法中进行 将其移动到onCreate(Bundle)中,你的应用程序将不会再次崩溃。另外,请查看日志,自己找出问题:)

    最终代码:-

    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;
    
        }
    }
    
    }
    
  2. # 2 楼答案

    移动BabyNegender&;要重新创建的编辑器:

        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();
    
  3. # 3 楼答案

    试试这个

    SharedPreferences babyOneGender = getApplication().getSharedPreferences(getString(R.string.baby_one_profile), Context.MODE_PRIVATE);