【问题标题】:SharedPreferences in fragment boolean value not updating片段布尔值中的 SharedPreferences 未更新
【发布时间】:2015-03-12 21:07:09
【问题描述】:

所以在我的 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();通过谷歌,我一直坚持下去。

【问题讨论】:

  • @Ruben 您是否将其设置为一个活动并在另一个活动中调用它?或者他们都在同一个活动中?
  • 相同的活动。首先在创建。第二个在 ViewPager 中的片段上。

标签: android android-fragments sharedpreferences


【解决方案1】:

您的函数逻辑有问题或不完整。首先,你的名字有拼写错误。它是uptadevalues,但可能应该是updateValues。其次,你传递boolean updatedvalue,然后你对这个值做nothing并返回它。这没有任何意义。在您的第一种方法中,您通过以下方式访问 SharedPreferences:

SharedPreferences preferences = getPreferences(MODE_PRIVATE);

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

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

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

【讨论】:

  • 谢谢!你很好地解释了我的错误在哪里。问题是你指出我使用不同的方法来访问 SharedPreferences 是什么给了我错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多