片段布尔值中的SharedPreferences未更新

时间:2015-03-12 21:07:10

标签: android android-fragments sharedpreferences

所以在我的MainActivity中,我在检查这样的布尔值时使用SharedPreferences。

  public boolean uptadevalues(boolean updatedvalue) {

        SharedPreferences preferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();


        if (mPremiumVQuery) {
            Log.d(TAG, "Called uptadevalues mPremiumVQuery");
            editor.putBoolean(mPremiumVString, true);
            editor.apply();
        } else {
            editor.putBoolean(mPremiumVString, false);
            editor.apply();
        }

        Log.d(TAG, "Called uptadevalues  ");

        return updatedvalue;
    }

我知道mPremiumQuery是真的,因为Log.d(TAG, "Called uptadevalues mPremiumVQuery");出现在logcat上。这意味着SharedPreference应该是Writing首选项。

片段:

    public boolean getPremiumValues() {

        Log.d(TAG, "getPremiumValues");
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
        return sp.getBoolean(mPremiumVString, false);

    }

然后点击按钮

 case R.id.button5:
                            if (getPremiumValues()) {
                            ** open activity **
                            } else {
                            **  dialog **  }

它始终显示对话框,但它确实应该打开新活动。 我无法看到我的错误在哪里!谢谢你的帮助。

更新

问题是我使用不同的方法来访问SharedPreferences,因为@ piotr.wittchen说。

有许多人说要从commit()更改;申请();我尝试过并且没有区别,并建议使用apply();通过谷歌我坚持下去。

1 个答案:

答案 0 :(得分:2)

您的功能逻辑出现问题或者说它不完整。首先,你的名字有拼写错误。这是uptadevalues,但可能应该是updateValues。其次,您通过boolean updatedvalue,然后使用此值执行 nothing 并返回它。它没有任何意义。在第一种方法中,您将通过以下方式访问SharedPreferences:

SharedPreferences preferences = getPreferences(MODE_PRIVATE);

但是在第二种方法中,您正在访问它们:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());

在两种情况下使用相同的方法访问SharedPreferences会更好。它可能会导致数据不一致。尝试仅使用SharedPreferences的一个实例。目前,您正在使用其中许多。