我需要首选项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。
有没有办法以编程方式执行此操作?
答案 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();
}
丑陋,但有效。