Подтвердить что ты не робот

SharedPreferences.getInt() приводит к ClassCastException - Почему?

У меня есть простой (не изменяемый пользователем) численный параметр, определенный в XML-предпочтениях следующим образом:

<EditTextPreference
  android:key="@string/numeric_val"
  android:defaultValue="0" />

И я прочитал его, используя этот простой оператор:

sharedPrefs.getInt(getString(R.string.numeric_val), 3)

Это работает, но когда я пытаюсь прочитать его, в первый раз после установки приложения, он генерирует ClassCastException.

В документации говорится, что getInt() "Выбрасывает ClassCastException, если есть предпочтение с этим именем, которое не является int" . - и я знаю, что это предпочтение четко определено как <EditTextPreference> (строка?), но если это причина исключения, то как я должен использовать SharedPreferences.getInt()?

Я знаю, что я могу использовать SharedPreferences.getString() вместо этого, а затем самостоятельно выполнить синтаксический анализ/преобразование, но тогда какова цель SharedPreferences.getInt()?

4b9b3361

Ответ 1

Вы можете сохранить предпочтения как sharedPreferences.edit().putInt(..).commit() (в качестве примера);

И затем получите их как getInt. Но если вы используете EditTextPreference, он установит тип предпочтения в строку. Поэтому, если вы используете EditTextPreference для хранения некоторых данных, используйте Integer.valueOf(getString), чтобы вернуть его.

Если вы положили его вручную, используйте getInt().

В качестве обходного решения вы можете установить onPreferenceChangeListener в этом EditTextPreference, и всякий раз, когда пользователь меняет его, вы вручную сохраните его как int, так что getInt будет работать нормально.

Ответ 2

android:defaultValue="0"

- строка.

Невозможно объявить фактический int в xml ваших префов