Java 优先权经理的麻烦

Java 优先权经理的麻烦,java,android,preferences,android-preferences,preference,Java,Android,Preferences,Android Preferences,Preference,我自己陷入了困境。我有一个PreferenceManager,它跟踪一些具有默认值的首选项,用户可以在运行时设置这些首选项。前几天我测试了这个,输入了一个显然不是我设置的值。我想加载xml文件中设置的默认值,以便我的应用程序再次运行。现在,它到达正在加载以下值的部分 dR.sethRVMax(Integer.parseInt(prefs.getString("hRVMaxKey", "100"))); 然后它会抛出这个错误 02-23 20:35:31.454: ERROR/AndroidRu

我自己陷入了困境。我有一个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);
如果需要更多信息,请告诉我


提前谢谢

在preferences.xml文件中,为每个首选项设置defaultValue=“where”

然后在你的活动中,如果你期望一个int,那么做一个

prefs.getInt(getString(R.string.some_id, 10)
其中,如果未设置值,则上面的10是您期望的默认值。由于在XML中设置了defaultValue,因此可能无法从上面的行中获得10

或者,为什么不这样做呢

try {
    dR.sethRVMax(Integer.parseInt(prefs.getString("hRVMaxKey", "100")));
} catch (NumberFormatException e) {
    // set to some default value instead
    dR.sethRVMax(100);
}

要将首选项重置回其默认值,您需要首先清除它们:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.edit().clear().commit();
PreferenceManager.setDefaultValues(this, R.xml.settings, true);
有关更多信息,请查看。在描述
setDefaultVaules
readreach
参数时,他们也讨论了这种情况:

注意:这不会将首选项重置回其默认值。对于该功能,请使用GetDefaultSharedReferences(上下文)并清除它,然后调用此方法并将此参数设置为true