这段代码有什么原因不能工作吗?大多数情况下它可以工作,但如果这是第一次打开应用程序,则不会。当我尝试调用 profileSelected 时,我在 ManageBaby1/NewBabyProfile Activity 中收到 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);
}
如果您需要更多信息或代码 fragment ,请告诉我 - 这已经困扰我一段时间了,但我一直在解决它,因为我一生都无法弄清楚......
谢谢!
编辑:这是 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),它就一直工作得很好。由于某种原因,我第一次单击该按钮时它不起作用。
最佳答案
我看了一下,很清楚我知道问题出在哪里。当您执行第一组 profileSelected 时,不会比较任何匹配项,因为您的默认值 profileSelected = genericPrefs.getString("profile_selected", "profileSelected");是所选的字符串配置文件。它不等于任何一个选项,因此 BabyProfile 从未被分配值,因此为 null。
另一个问题是你永远不应该使用 == 来比较字符串。您应该始终使用 String.equals()。即在本例中它将是 profileSelected.equals("babyOne")。
关于java - 按下按钮时提交 SharedPreferences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19532077/