java - 按下按钮时提交 SharedPreferences

标签 java android

这段代码有什么原因不能工作吗?大多数情况下它可以工作,但如果这是第一次打开应用程序,则不会。当我尝试调用 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/

相关文章:

java - AsyncTask 更好的通信协议(protocol)

Android - 如何包含和使用 ResourceBundle

java - 尝试获取 sbt 中的问题

java - 如何在java指定的文件夹中运行Windows命令(cmd)

java - AndroidDriver 无法解析为类型

Gradle 插件更新并迁移到 annotationProcessor 后,Android 数据绑定(bind)构建失败

android - Firebase Crashlytics 报告 InflateException : ResourceNotFoundException for a Trend TaintArt for 4x6

java - 转换和泛型以在 Java 8 中启用列表连接

java - 如何在java中优化.kafka生产者?

android - Cordova -插件-fcm : Cannot find name 'FCMPlugin'