此代码有任何原因不起作用吗?在大多数情况下,它都可以运行,但是如果是第一次打开该应用程序,则不会。当我尝试调用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),那么它一直都能正常工作。由于某种原因,我第一次单击该按钮时,它不起作用。
最佳答案
我看了一下,有一个很好的主意,我知道问题出在哪里。当您执行第一组profileSelected时,两者都不匹配,因为您的profileSelected默认值= generalPrefs.getString(“ profile_selected”,“ profileSelected”);是选择的字符串配置文件。它不等于任何一个选项,因此BabyProfile从未分配值,因此为null。
另一个问题是,永远不要使用==来比较字符串。您应该始终使用String.equals()。即在这种情况下,它将是profileSelected.equals(“ babyOne”)。
关于java - 按下按钮时提交到SharedPreferences,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19532077/