📅  最后修改于: 2023-12-03 14:47:26.238000             🧑  作者: Mango
在 Android 开发中,我们有时需要使用 SharePreference 来存储应用程序中的某些值,尤其是 boolean 类型的值。然而,有些时候我们会遇到一个问题:SharePreference 中存储的 boolean 值在某些情况下似乎不起作用。
这个问题的根本原因是由于 SharePreference 内部使用的是字符串类型来存储 boolean 值,而我们在取出该值的时候,却将它作为 boolean 类型来使用。这样的话,就会导致一些奇怪的结果,例如当我们从 SharePreference 中取出一个 boolean 类型的值时,得到的却是 null。
一种解决方案是将 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);
另一种解决方案是使用另外一个变量来存储 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。
参考资料: