从 SharedPreferences 将布尔值设置为 null

Fat*_*onk 4 java android sharedpreferences

我用来SharedPreferences存储用户设置/选项。

我添加了一个可以打开或关闭的新选项,因此希望将其存储在boolean我的共享首选项文件中。

null这一切都很好,但是,由于这是一个新选项,如果用户尚未明确设置该选项,我想将内部变量设置为(这样我可以在第一次运行新版本时提示他们选择)时间)。

以下内容不起作用,因为boolean如果首选项未在 中找到,则 getBoolean 期望原语作为默认值返回shared+prefs

myNewSetting = shared_prefs.getBoolean("my_mew_setting",null);
Run Code Online (Sandbox Code Playgroud)

上面的myNewSettingaBoolean可以设置为,但是由于s 的要求,null没有帮助。getBoolean

有没有办法解决?

Zin*_*inc 6

getBoolean 方法返回一个原始布尔值,因此即使您将它分配给一个布尔值,它也只是将其装箱。该方法的定义是:

抽象布尔 getBoolean(String key, boolean defValue)

如果你确实想区分设置不存在的情况,只需检查它是否存在:

   if (!shared_prefs.contains("my_mew_setting"))
      myNewSetting = null;
   else
      myNewSetting = shared_prefs.getBoolean("my_mew_setting", true /* never use default value in this code because of the if condition */);
Run Code Online (Sandbox Code Playgroud)