【问题标题】:Android Preferences: Incorrect default values DESPITE "setDefaultValues"Android 首选项:不正确的默认值尽管“setDefaultValues”
【发布时间】:2011-11-26 19:00:00
【问题描述】:

我有类似this的问题,所以我按照建议的解决方案进行,并将这行代码添加到onCreate:

PreferenceManager.setDefaultValues(this, R.xml.settings, false);

不幸的是问题仍然存在,如果用户没有更改设置,仍然是默认值(true)来自

mPreferences.getBoolean(String.valueOf(day_of_week), true)

用于代替 XML 中的默认值。

有人提议将 getBoolean() 的默认值参数更改为 null,但此代码会使应用程序崩溃:

mPreferences.getBoolean(String.valueOf(day_of_week), (Boolean) null)

有什么建议吗?提前致谢!

【问题讨论】:

  • 您是否在您的settings.xml 中设置了android:defaultValue="default"?并且应该将此行添加到您的主要活动onCreate,而不是您的设置中。
  • 不,我将 android:defaultValue 设置为“true”或“false”。 setDefaultValues() 函数位于我的主 Activity 的 onCreate 中,而不是在设置中
  • @JhonnyR,我也浪费了几个小时来追踪这个问题。我同意这是一个错误。人们应该修改这篇文章,以便将来像我这样的人节省时间。

标签: android preferences default-value


【解决方案1】:

终于成功了!我真的花了很多时间和精力来寻找错误,当我在这里发布时,我自己发现了它~~感谢大家帮助我解决这个问题。

如果有人遇到这个问题,解决方法如下:将getBoolean() 的默认值从 true 更改为 false,如下所示:

mPreferences.getBoolean(String.valueOf(day_of_week), true) -> 不起作用,无论 XML 中发生什么,它总是正确的

mPreferences.getBoolean(String.valueOf(day_of_week), false) -> 有效!这是来自 XML 的正确默认值

我真的不明白这样做的逻辑,但现在它完美地工作了。对我来说似乎有点像一个错误。

【讨论】:

  • 以后请务必留下答案作为answers请不要编辑问题(我为您移动了这个,您可以查看Q上的编辑历史以获取详细信息)
【解决方案2】:

setDefaultValues 的第三个参数设置为true。所以, PreferenceManager.setDefaultValues(this, R.xml.settings, true);

来自documentation

public static void setDefaultValues (Context context, int resId, boolean readAgain)
如果 readAgain 为 false,则仅在过去从未调用过此方法时才设置默认值(或默认值共享首选项文件中的 KEY_HAS_SET_DEFAULT_VALUES 为错误的)。要尝试绕过此检查再次设置默认值,请将 readAgain 设置为 true。
注意:这不会将首选项重置为其默认值。

所以,我的理解是:

  • 如果readAgainfalse,它将只读取一次默认值 在第一次运行应用程序后。如果您使用默认值添加新属性 值偏好,它不会初始化,直到你卸载和 再次安装应用程序。
  • 如果readAgaintrue,它将读取默认值 在每个函数调用上一次又一次地取值。但是,它不会重置 默认值,如果它们已经被设置或更改 应用程序。

【讨论】:

  • +1 好点,如果这个最后的提示没有解决问题,那就什么都没有:-D
  • 也试过了.. 没有改善,仍然不是 XML 中的值
  • @JhonnyR 这些“不正确”的值是否可能已保存为当前设置值?在这种情况下,此方法永远不会用默认值覆盖它们。同样,根据文档:将 readAgain 设置为 true 不会将首选项重置为其默认值。对于该功能,使用getDefaultSharedPreferences(Context) 并清除它,然后调用此方法并将此参数设置为true。将来,当您开始正确初始化默认值时,将不需要清除。
  • 不,我清除了所有保存的数据以确保使用默认值。但是正如问题帖子中指出的那样,问题现在已经解决。感谢您的帮助!
  • 要查看保存了哪些设置,您可以获取带有存储值的设置文件(即在 Eclipse 中使用 DDMS)并查看内部。该文件位于/data/data/<your.app.name>/shared_prefs
猜你喜欢
  • 2012-09-28
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 2014-04-29
  • 1970-01-01
  • 2013-11-17
  • 1970-01-01
相关资源
最近更新 更多