📜  sharepreference boolean 不起作用 (1)

📅  最后修改于: 2023-12-03 14:47:26.238000             🧑  作者: Mango

SharePreference Boolean 不起作用

在 Android 开发中,我们有时需要使用 SharePreference 来存储应用程序中的某些值,尤其是 boolean 类型的值。然而,有些时候我们会遇到一个问题:SharePreference 中存储的 boolean 值在某些情况下似乎不起作用。

这个问题的根本原因是由于 SharePreference 内部使用的是字符串类型来存储 boolean 值,而我们在取出该值的时候,却将它作为 boolean 类型来使用。这样的话,就会导致一些奇怪的结果,例如当我们从 SharePreference 中取出一个 boolean 类型的值时,得到的却是 null。

解决方案1:使用 getString 和 parseBoolean 方法

一种解决方案是将 boolean 值存储在 SharePreference 中时,将它转换成字符串类型,然后再取出时使用 getString 方法将其转换为 boolean。

SharedPreferences sharedPreferences = getSharedPreferences("myPreferences", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("myBooleanValue", Boolean.toString(true));
editor.apply();

// 从 SharePreference 中取出 boolean 值,并将其转换为 boolean 类型
String booleanValue = sharedPreferences.getString("myBooleanValue", null);
boolean myBoolean = Boolean.parseBoolean(booleanValue);
解决方案2:使用 Boolean.TRUE 或 Boolean.FALSE

另一种解决方案是使用另外一个变量来存储 boolean 值,例如:

SharedPreferences sharedPreferences = getSharedPreferences("myPreferences", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("myBooleanValue", true);
editor.apply();

// 从 SharePreference 中取出 boolean 值
boolean booleanValue = sharedPreferences.getBoolean("myBooleanValue", false);
Boolean myBoolean = booleanValue ? Boolean.TRUE : Boolean.FALSE;

这样做的好处是可以保证从 SharePreference 中取出的值始终是一个 Boolean 对象。

总之,以上两种解决方案都可以有效地解决 SharePreference boolean 不起作用的问题。但是需要注意的是,在使用第二种解决方案时,一定要使用 Boolean.TRUE 或 Boolean.FALSE 来存储 boolean 值,而不能使用 true 或 false。

参考资料: