Ошибка 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 здесь.