2

我需要在首选项 XML 中设置的默认值在首次运行时可用。

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

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

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

尽管首选项 XMLtimeout指定prefs.getString()

android:defaultValue="5"

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

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

有没有办法以编程方式做到这一点?

4

1 回答 1

2

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

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

这当然会在您安装应用程序后第一次调用它时引发异常,所以您要做的是将它包含在 a 中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();
}

丑陋,但有效。

于 2011-10-21T04:41:02.830 回答