2011-08-31 13 views
17

que tienen un valor numérico (el usuario no editable) la simple definido en un XML preferencias de la siguiente manera:SharedPreferences.getInt() da como resultado ClassCastException - ¿Por qué?

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

y lo leí el uso de esta declaración simple:

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

Funciona, pero cuando Intento leerlo, por primera vez después de la instalación de la aplicación, genera un ClassCastException.

documentation dice que getInt()"Emite ClassCastException si hay una preferencia con este nombre que no es una int." - y sé que esta preferencia está claramente definida como <EditTextPreference> (¿una cadena?) Pero, si este es el motivo de la excepción, ¿cómo se supone que debo usar SharedPreferences.getInt()?

Sé que puedo usar SharedPreferences.getString() en su lugar y luego hacer el análisis/conversión, pero ¿cuál es el propósito de SharedPreferences.getInt()?

Respuesta

28

Puede almacenar preferencias como sharedPreferences.edit().putInt(..).commit() (como ejemplo);

Y luego obténgalos como getInt. Pero si usa EditTextPreference, establecerá el tipo de preferencia en la cadena. Entonces, si usa EditTextPreference para almacenar algunos datos, use Integer.valueOf(getString) para recuperarlo.

Si lo pones manualmente, usa getInt().

Como solución alternativa, puede establecer onPreferenceChangeListener en este EditTextPreference, y cada vez que el usuario lo cambie, lo guardará manualmente como int, por lo tanto, getInt funcionará normalmente.

+0

gracias por esta explicación muy educar. +1 y aceptando. – uTubeFan

4
android:defaultValue="0" 

es una cadena.

No hay manera de declarar un int real en el xml de sus Preferencias

Cuestiones relacionadas