1

我试图从SharedPreferences中获取一个布尔值,该值是true,但每次都得到一个false值。名为“MyPref”的 SharedPreferences 文件包含以下代码:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="PREMIUM" value="true" />
</map>

我正在使用以下代码向MyActivity.class中的 SharedPreferences 添加值:

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 1); // 0 - for private mode
Editor editor = pref.edit();
editor.putBoolean("PREMIUM", true); // Storing boolean - true/false
editor.commit(); // commit changes
Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));

并使用以下方法在多个类上检索它:

boolean mIsPremium = false;
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 1); // 0 - for private mode
mIsPremium = pref.getBoolean("PRIVATE", false); // getting boolean
Log.d("IS PREMIUM", String.valueOf(mIsPremium));
if(mIsPremium) {
    // PREMIUM USER - NO ADS
} else {
    // NOT PREMIUM USER - SHOW ADS
}

我总是将Premium的值设为false,发生这种情况的原因是什么以及如何解决?我正在使用安卓 4.2.2。谢谢你们。

4

3 回答 3

8
mIsPremium = pref.getBoolean("PREMIUM", false); 

不是("PRIVATE",false)

您正在使用不同的键,它们需要匹配。

于 2013-07-05T10:50:45.773 回答
2

SharedPrefernces 保存在键:值对中,您将值放入“PREMIUM”并检索为“PRIVATE”

于 2013-07-05T10:52:51.737 回答
1

您更改了键“PREMIUM”和“PRIVATE”。使用硬编码字符串通常是一种不好的编程习惯。我建议对这些使用最终的静态变量。

于 2013-07-05T11:02:06.363 回答