0

这段代码有什么不应该工作的原因吗?大多数时候它可以工作,但如果这是第一次打开应用程序,它不会。当我尝试调用 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);
    }

如果您需要更多信息或代码片段,请告诉我 - 这一直困扰着我一段时间,但我一直在努力解决它,因为我一生都无法弄清楚......

谢谢!

编辑:这是 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),它总是可以正常工作。出于某种原因,它只是在我第一次单击按钮时不起作用。

4

2 回答 2

1

我看了看,有一个很好的主意,我知道问题出在哪里。当您进行第一组 profileSelected 比较时,两者都不匹配,因为您的默认值 profileSelected = generalPrefs.getString("profile_selected", "profileSelected"); 是选择的字符串配置文件。它不等于任何一个选项,因此 BabyProfile 从未被赋值,因此为空。

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

于 2013-10-24T03:05:30.963 回答
0

你把这段代码放进去了onCreate吗?

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

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

于 2013-10-23T03:21:16.553 回答