android:defaultValue无法在某些手机上运行 - 解决方法?

时间:2011-10-20 21:50:02

标签: android android-preferences galaxy

我需要首选项XML中设置的默认值才能在第一次运行时使用。

在某些手机中,这有效,但其他一些手机(例如Samsung)表现得非常奇怪。

在我的特定情况下,以下代码:

String key = "@string/timeout_key"
timeout = Integer.valueOf(prefs.getString(key, "10"));

保持返回(到timeout)默认值“10”(作为第二个参数传递给prefs.getString()),尽管首选项XML指定:

android:defaultValue="5"

字符串“timeout_key”存在,我可以验证它是否已正确读取。

我的“手动解决方法”目前是调用设置编辑器,重新键入设置并按OK。

有没有办法以编程方式执行此操作?

1 个答案:

答案 0 :(得分:2)

SharedPreferences.getString()方法有问题,不会返回android:defaultValue。如果读取失败,它将仅返回第二个参数。要解决此问题,请在第二个参数中添加 null

timeout = Integer.valueOf(prefs.getString(key, null));

这当然会在安装应用程序后第一次调用它时抛出异常,所以你要做的是将它包含在try中,当捕获异常时,写下你的默认值(你的android中的那个) :defaultValue,最初打算在Android没有错误时使用):

try {
  timeout = Integer.valueOf(prefs.getString(key, null));
}
catch (Exception e) {
  Editor editor = prefs.edit();
  editor.putString(key, Integer.toString(defaultValue));
  editor.commit();
}

丑陋,但有效。