所以在我的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();通过谷歌我坚持下去。
答案 0 :(得分:2)
您的功能逻辑出现问题或者说它不完整。首先,你的名字有拼写错误。这是uptadevalues
,但可能应该是updateValues
。其次,您通过boolean updatedvalue
,然后使用此值执行 nothing 并返回它。它没有任何意义。在第一种方法中,您将通过以下方式访问SharedPreferences:
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
但是在第二种方法中,您正在访问它们:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
在两种情况下使用相同的方法访问SharedPreferences会更好。它可能会导致数据不一致。尝试仅使用SharedPreferences的一个实例。目前,您正在使用其中许多。