此代码有任何原因不起作用吗?在大多数情况下,它都可以运行,但是如果是第一次打开该应用程序,则不会。当我尝试调用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/

10-09 05:40