Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于用户输入在Android中编辑SharedReference_Java_Android_Sharedpreferences - Fatal编程技术网

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

Java 基于用户输入在Android中编辑SharedReference,java,android,sharedpreferences,Java,Android,Sharedpreferences,我对Java/Android开发非常陌生,我尝试让用户检查“男孩”或“女孩”的单选按钮,并将其写入SharedReferences,以便我可以在其他活动中使用它。每当我尝试打开此活动时,我的应用程序就会崩溃 public class NewBabyProfile extends Activity { String GENDER = "Baby1Gender"; // SharedPreferences initializations SharedPreferences babyOneGen

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

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;

    }
}

}
试试这个

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

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

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;

    }
}

}

将BabyNegender和editor的初始化移动到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();

你能在
OnCreate
方法中移出
babyOneGender
editor
的初始化,看看会发生什么吗?当我这样做时,下面的开关中的“editor无法解决”错误。请从日志中提供崩溃的错误10-09 21:43:19.407:E/AndroidRuntime(3263):致命异常:main 10-09 21:43:19.407:E/AndroidRuntime(3263):java.lang.RuntimeException:无法实例化活动组件信息{com.example.parentingEmemenders/com.example.parentingEmenders.NewBabyProfile}:java.lang.NullPointerException'用NewB发布整个活动‌​abyProfile。这会全局初始化它们吗?当我在onRadioButtonClicked()中尝试使用它们时,似乎通常将它们放在onCreate中时,它们没有定义。抱歉,如果我使用了一些不正确的术语,谢谢你的帮助!已更新全局初始化:)全局声明变量,但在onCreate()中初始化它们。这不会再引起问题:)谢谢!我不知道为什么出于某种原因,它没有点击,但现在它是有意义的:)这似乎已经奏效了!有没有办法确认它编辑了SharedReferences文件?我没有根手机,因此无法在/data中查看XML文件。您可以在Android emulator上进行测试,在Android emulator中,您有根权限查看任何文件。