首选项管理器问题
我让自己陷入了困境。我有一个 PreferenceManager,它跟踪一些具有默认值并且可以由用户在运行时设置的首选项。有一天,我正在对此进行测试并输入一个显然未按我设置的方式处理的值。我想加载 xml 文件中设置的默认值,以便我的应用程序能够再次运行。现在,它到达加载下面的值的部分
dR.sethRVMax(Integer.parseInt(prefs.getString("hRVMaxKey", "100")));
然后它吐出此错误
02-23 20:35:31.454: ERROR/AndroidRuntime(276): FATAL EXCEPTION: main
02-23 20:35:31.454: ERROR/AndroidRuntime(276): java.lang.RuntimeException: Unable to start activity ComponentInfo{cpe495.smartapp/cpe495.smartapp.SmartApp}: java.lang.NumberFormatException: unable to parse '7p-' as integer
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.os.Handler.dispatchMessage(Handler.java:99)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.os.Looper.loop(Looper.java:123)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.app.ActivityThread.main(ActivityThread.java:4627)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at java.lang.reflect.Method.invokeNative(Native Method)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at java.lang.reflect.Method.invoke(Method.java:521)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at dalvik.system.NativeStart.main(Native Method)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): Caused by: java.lang.NumberFormatException: unable to parse '7p-' as integer
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at java.lang.Integer.parse(Integer.java:433)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at java.lang.Integer.parseInt(Integer.java:422)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at java.lang.Integer.parseInt(Integer.java:382)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at cpe495.smartapp.SmartApp.onCreate(SmartApp.java:90)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): ... 11 more
我想从 xml 加载完整的默认值,而不是尝试加载最后保存的首选项。我已尝试以下方法,但不起作用:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
PreferenceManager.setDefaultValues(this, R.xml.settings, true);
prefs.registerOnSharedPreferenceChangeListener(this);
如果需要更多信息,请告诉我。
提前致谢!
I have got my self into a problem. I have a PreferenceManager that keeps track of some preferences that have default values and can be set by the user at run time. The other day i was testing this and input a value that apparently is not handled by the way i have it set up. I want to load the default values that are set in the xml file so that my application will run again. Right now, it gets to the part where it is loading the value below
dR.sethRVMax(Integer.parseInt(prefs.getString("hRVMaxKey", "100")));
And then it spits out this error
02-23 20:35:31.454: ERROR/AndroidRuntime(276): FATAL EXCEPTION: main
02-23 20:35:31.454: ERROR/AndroidRuntime(276): java.lang.RuntimeException: Unable to start activity ComponentInfo{cpe495.smartapp/cpe495.smartapp.SmartApp}: java.lang.NumberFormatException: unable to parse '7p-' as integer
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.os.Handler.dispatchMessage(Handler.java:99)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.os.Looper.loop(Looper.java:123)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.app.ActivityThread.main(ActivityThread.java:4627)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at java.lang.reflect.Method.invokeNative(Native Method)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at java.lang.reflect.Method.invoke(Method.java:521)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at dalvik.system.NativeStart.main(Native Method)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): Caused by: java.lang.NumberFormatException: unable to parse '7p-' as integer
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at java.lang.Integer.parse(Integer.java:433)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at java.lang.Integer.parseInt(Integer.java:422)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at java.lang.Integer.parseInt(Integer.java:382)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at cpe495.smartapp.SmartApp.onCreate(SmartApp.java:90)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-23 20:35:31.454: ERROR/AndroidRuntime(276): ... 11 more
I would like to load the complete defaults from the xml instead of trying to load the last saved preference. I have tried the following and it is not working:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
PreferenceManager.setDefaultValues(this, R.xml.settings, true);
prefs.registerOnSharedPreferenceChangeListener(this);
If more information is needed please let me know.
Thanks in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
要将首选项重置回默认值,您需要先清除它们:
有关详细信息,请查看 PreferenceManager 文档。他们在描述
setDefaultVaules
的readAgain
参数时也讨论了这种情况:To reset preferences back to their default values, you need to clear them first:
For more info, check out the docs for PreferenceManager. They discuss this case too when describing the
readAgain
parameter ofsetDefaultVaules
:在preferences.xml 文件中,为每个首选项设置defaultValue="whatever"。
然后在您的活动中,如果您期望一个 int,请执行 a ,
其中上面的 10 是您在未设置值时期望的默认值。由于您在 XML 中设置了 defaultValue,因此您可能不会从上面的行中返回 10。
或者,为什么不这样做
In your preferences.xml file, set the defaultValue="whatever" for each preference.
Then in your activity, if you expect an int, do a
where the 10 above is the default value that you expect if a value is not set. Since you set the defaultValue in your XML, you probably wont get the 10 back from the above line.
Alternatively, why not do