Android 片段布尔值中的SharedReferences未更新
所以在我的主要活动中,我在检查布尔值时使用了SharedReferencesAndroid 片段布尔值中的SharedReferences未更新,android,android-fragments,sharedpreferences,Android,Android Fragments,Sharedpreferences,所以在我的主要活动中,我在检查布尔值时使用了SharedReferences public boolean uptadevalues(boolean updatedvalue) { SharedPreferences preferences = getPreferences(MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); if (mPremiumVQ
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(标记,“称为uptadevalues-mPremiumVQuery”)代码>出现在logcat上。这意味着SharedReference应该是编写首选项
关于片段:
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 ** }
它总是显示对话框,但实际上应该打开新活动。
我看不出我的错误在哪里!谢谢你的帮助
更新:
问题是我使用了不同的方法来访问SharedReferences@piotr.wittchen说
有很多人说要从commit()改变;应用();我试过了,但没有区别,建议使用apply();通过谷歌,我一直使用它。您的函数逻辑有问题,或者它不完整。首先,你的名字有拼写错误。它是uptadevalues
,但可能应该是updateValues
。其次,传递布尔更新值
,然后对该值执行无操作,并返回它。这没有任何意义。在第一种方法中,您通过以下方式访问SharedReference:
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
但在第二种方法中,您是这样访问它们的:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
在这两种情况下,最好使用相同的方法访问SharedReference。这可能会导致数据不一致。尝试只使用SharedReferences的一个实例。目前,您正在使用其中的许多功能。请看这里:@Ruben您是在一个活动中设置它,然后在另一个活动中调用它吗?或者他们都在做同样的事?同样的事。首先是创建。第二个是ViewPager中的一个片段。谢谢!你很好地解释了我的错误在哪里。问题是你所指出的,我使用不同的方法访问SharedReferences,这给了我错误。