Ошибка Android Preferences, "String нельзя передать в int"
Я пытаюсь настроить активность настроек, но мое приложение продолжает сбой, и я получаю следующий logcat:
FATAL EXCEPTION: main java.lang.RuntimeException: не удается запустить активность ComponentInfo {com.appthing.myapp/com.appthing.myapp.Main}: java.lang.ClassCastException: java.lang.String не может быть отброшено java.lang.Integer
Вызвано: java.lang.ClassCastException: java.lang.String не может быть cast to java.lang.Integer 07-24 16: 37: 59.556: E/AndroidRuntime (17384): в android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:240)
В моей работе Main
у меня есть следующий код внутри метода onResume()
:
SeekBar tipSeekBar = (SeekBar) findViewById(R.id.tipSeekBar);
SeekBar splitSeekBar = (SeekBar) findViewById(R.id.splitSeekBar);
SharedPreferences preferences = PreferenceManager
.getDefaultSharedPreferences(this);
tipSeekBar.setProgress(preferences.getInt("defaultTip", 15));
splitSeekBar.setProgress(preferences.getInt("defaultSplit", 1));
tipSeekBar.setMax(preferences.getInt("maxTip", 25));
splitSeekBar.setMax(preferences.getInt("maxSplit", 10));
Вот что я имею в классе Preference (по запросу):
addPreferencesFromResource(R.layout.preferences);
// I was told in tutorials this is all I need in the oncreate method
Я не понимаю, почему он говорит что-то о строке. Все мои значения являются целыми числами, и я использую android:inputType="number"
, чтобы убедиться, что вводится только int. Я также попытался удалить и переустановить приложение, чтобы очистить кеш, и ничего не работает.
ПОСТАНОВИЛИ:
"Ваши предпочтения в XML, даже если вы установите андроид: inputType =" number "по-прежнему сохраняются как строка" (Waza_Be).
Все, что мне нужно было сделать, это сделать Integer.parseInt()
, чтобы получить правильное значение.
Ответы
Ответ 1
Ваши настройки в XML, даже если вы установите android:inputType="number"
, по-прежнему сохраняются в виде строки
У вас есть 2 варианта:
1) "не очень-приятно": Integer.parseInt( preferences.getString("defaultTip", "15"));
2) Используя собственный тип Integer Preference. Сложнее установить на первое место, но действительно лучше (аналогичный вопрос здесь: fooobar.com/questions/109502/...)
Ответ 2
В вашем фрагменте, на какой строке происходит исключение? Является ли "defatult" опечаткой?
splitSeekBar.setProgress(preferences.getInt("defatultSplit", 1));
Ответ 3
Если вы сохраняете предпочтения с правильными типами данных, тогда это не должно быть проблемой. Посмотрите JavaDoc здесь.