共享首选项不能正确获取布尔值

时间:2017-10-18 07:35:43

标签: android sharedpreferences android-sharedpreferences

我试图从共享偏好设置加载布尔值。首次启动它应该是TRUE,因为我从未将它保存到共享首选项。但是,我不知何故变得虚假。

见下面的代码。

settings = context.getSharedPreferences(SAVED_PREFERENCES, 0);
isFirstLaunch = settings.getBoolean(FIRST_LAUNCH, true);
Log.d(TAG, "loadIsFirstLaunch: " + isFirstLaunch);

P.S。我没有在100%之前保存共享首选项中的FIRST_LAUNCH值。

UPD1 我已经用空项目进行了双重检查 - 代码运行正常。共享首选项使用布尔类,而不是布尔基元类型。因此,默认情况下布尔值为false的情况并非如此。另外根据调试我的共享首选项在启动时以某种方式包含FIRST_LAUNCH值。所以看看它是如何到达那里的。

UPD2 我终于卡住了。删除了FirstLaunch的所有提及,但是当另一个读取其他值的调用时,它仍然以某种方式出现在SharedPreferences中。所以问题是 - 如何摆脱共享偏好中保存的值。 http://take.ms/Rr0Xf

UPD3 我已将名称更改为已保存的偏好设置文件并且有效。所以问题是SOMEHOW设备即使在应用程序干净安装后也保留了保存的首选项的信息。 PFM。

3 个答案:

答案 0 :(得分:1)

由于积分较少,我无法回答您的问题因此,如果您确定没有为FIRST_LAUNCH设置任何值,那么1.尝试清理应用程序&#39 ; s数据2.能否提供完整的源代码

和@miller如果有多个共享偏好怎么办

答案 1 :(得分:1)

因为默认的布尔值将其值设置为false ..当共享首选项返回空值时,它只接受true值,但是布尔值必须具有true或false的值...它不会不支持空值。

所以你需要做的是在加载之前在类中以编程方式将会话的布尔值设置为true,然后从会话中获取值

答案 2 :(得分:0)

所以最后我发现了问题和解决方案。

在Android M及以上版本中,谷歌将应用程序备份保留在谷歌驱动程序中,这就是为什么即使在重新安装共享首选项后还原。我已禁用备份。

项目清单文件在Application部分下设置android:allowBackup =“true”为false。