PreferenceManager Trouble - PullRequest
       83

PreferenceManager Trouble

0 голосов
/ 24 февраля 2011

Я втянул себя в проблему. У меня есть 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);

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Чтобы сбросить настройки обратно к значениям по умолчанию, вам необходимо сначала очистить их:

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

Для получения дополнительной информации, ознакомьтесь с документами для PreferenceManager . Они также обсуждают этот случай при описании параметра readAgain в setDefaultVaules:

Примечание: это НЕ сбрасывает настройки обратно к значениям по умолчанию. Для этой функции используйте getDefaultSharedPreferences (Context) и очистите его, а затем вызовите этот метод с параметром, установленным в true

0 голосов
/ 24 февраля 2011

В вашем файле Preferences.xml установите defaultValue = "what" для каждого предпочтения.

Тогда в своей деятельности, если вы ожидаете int, выполните

prefs.getInt(getString(R.string.some_id, 10)

где 10 выше - это значение по умолчанию, которое вы ожидаете, если значение не установлено. Поскольку вы устанавливаете defaultValue в своем XML, вы, вероятно, не получите 10 обратно из приведенной выше строки.

В качестве альтернативы, почему бы не сделать

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