0

私は自分自身を問題に陥らせました。デフォルト値を持ち、実行時にユーザーが設定できるいくつかの設定を追跡する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);

さらに詳しい情報が必要な場合はお知らせください。

前もって感謝します!

4

2 に答える 2

2

プリファレンスをデフォルト値にリセットするには、最初にプリファレンスをクリアする必要があります。

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

詳細については、PreferenceManagerのドキュメントを確認してください。彼らは、 :のreadAgainパラメータを説明するときにこのケースについても説明します。setDefaultVaules

注:これにより、設定がデフォルト値にリセットされることはありません。その機能については、getDefaultSharedPreferences(Context)を使用してクリアした後、このパラメーターをtrueに設定してこのメ​​ソッドを呼び出します。

于 2011-02-24T06:22:31.587 に答える
0

Preferences.xmlファイルで、各プリファレンスにdefaultValue="whatever"を設定します。

次に、アクティビティで、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);
}
于 2011-02-24T03:13:31.453 に答える