Search code examples
javaandroidpreferencesandroid-preferencespreference

PreferenceManager Trouble


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!


Solution

  • To reset preferences back to their default values, you need to clear them first:

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    prefs.edit().clear().commit();
    PreferenceManager.setDefaultValues(this, R.xml.settings, true);
    

    For more info, check out the docs for PreferenceManager. They discuss this case too when describing the readAgain parameter of setDefaultVaules:

    Note: this will NOT reset preferences back to their default values. For that functionality, use getDefaultSharedPreferences(Context) and clear it followed by a call to this method with this parameter set to true