2011-02-24 25 views
0

私は自分自身を問題にしています。私はPreferenceManagerを持っていて、デフォルト値を持ついくつかのプリファレンスを追跡し、実行時にユーザーが設定することができます。先日、私はこれをテストしていて、設定した方法で処理されていない値を入力しました。 xmlファイルに設定されているデフォルト値をロードして、アプリケーションが再び実行されるようにしたい。今、それはPreferenceManager Trouble

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); 

詳細が必要な場合は私に教えてください。

ありがとうございます!

答えて

2

をしないで、あなたが最初にそれらをクリアする必要があります。詳細については

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

を、docs for PreferenceManagerをチェックしてください。

注:これは裏をデフォルト値に設定をリセットしませんsetDefaultVaulesreadAgainパラメータを記述するとき、彼らはあまりにもこのケースを議論します。この機能を使用するには、getDefaultSharedPreferences(Context)を使用してこのメ​​ソッドを呼び出し、このパラメータをtrueに設定してこのメ​​ソッドを呼び出します。

0

preferences.xmlファイルで、defaultValue = "whatever"を各設定に設定します。あなたがintを期待する場合

は、その後、あなたの活動では、上記の10の値が設定されていない場合は、期待デフォルト値である

prefs.getInt(getString(R.string.some_id, 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); 
}