按下按钮时承诺SharedPreferences

时间:2013-10-23 03:08:59

标签: java android

这段代码有什么原因不起作用吗?它大部分时间都有效,但如果它是第一次打开应用程序,它就不会。当我尝试调用profileSelected时,我在ManageBaby1 / NewBabyProfile活动中得到NullPointerException。然后,如果我重新打开应用程序并选择另一个按钮(假设我第一次点击babyOneButton并点击babyTwoButton第二次)一切正常。我甚至可以回去再点击babyOneButton,它会正常工作。出于某种原因,按下按钮时没有正确写入?

public void babyOneButtonClick(View view) {

    profileSelected = "babyOne";

    if (babyOneProfile.contains("name")) {
        generalPrefsEditor.putString("profile_selected", profileSelected).commit();
        Intent goToManageBaby1 = new Intent(this, ManageBaby1.class);
        startActivity(goToManageBaby1);
    } else {
        generalPrefsEditor.putString("profile_selected", profileSelected).commit();
        Intent goToNewBabyProfile = new Intent(this, NewBabyProfile.class);
        startActivity(goToNewBabyProfile);
    }

}

public void babyTwoButtonClick(View view) {

    profileSelected = "babyTwo";

    if (babyTwoProfile.contains("name")) {
        generalPrefsEditor.putString("profile_selected", profileSelected).commit();
        Intent goToManageBaby1 = new Intent(this, ManageBaby1.class);
        startActivity(goToManageBaby1);
    } else {
        generalPrefsEditor.putString("profile_selected", profileSelected).commit();
        Intent goToNewBabyProfile = new Intent(this, NewBabyProfile.class);
        startActivity(goToNewBabyProfile);
    }

如果您需要更多信息或代码片段,请告诉我 - 这已经困扰了我一段时间,但我一直在努力解决它,因为我不能为我的生活弄明白... < / p>

谢谢!

编辑:这是ManageBaby1中抛出异常的代码。

        generalPrefs = getSharedPreferences(getString(R.string.general_preferences), 0);
    generalPrefsEditor = generalPrefs.edit();

    profileSelected = generalPrefs.getString("profile_selected", "profileSelected");

    if (profileSelected == "babyOne") {
        babyProfile = getSharedPreferences(getString(R.string.baby_one_profile), 0);
    } else if (profileSelected =="babyTwo") {
        babyProfile = getSharedPreferences(getString(R.string.baby_two_profile), 0);
    }

    editor = babyProfile.edit();

但是,如果我拿走if语句(需要在MainActivity中编写profileSelected),它一直都能正常工作。出于某种原因,我第一次点击按钮时就没有工作了。

2 个答案:

答案 0 :(得分:1)

我看了一眼并且有一个很好的主意我知道问题是什么。当您执行第一组profileSelected时,两者都不匹配,因为您的缺省值为profileSelected = generalPrefs.getString(“profile_selected”,“profileSelected”);是字符串profileselected。它不等于任何一个选项,因此BabyProfile永远不会赋值,因此为null。

另一个问题是你永远不应该使用==来比较字符串。您应该始终使用String.equals()。即在这种情况下,它将是profileSelected.equals(“babyOne”)。

答案 1 :(得分:0)

您是否已将此代码放入onCreate

generalPrefsEditor = getSharedPreferences(PREFS_NAME, MODE_WORLD_READABLE);
SharedPreferences.Editor pref_editor = generalPrefsEditor.edit();

我认为这是你得到的地方NullPointerException