Android se estrella en ListPreference

Estoy tratando de añadir una lista de preferencias a mi aplicación. Mi código xml es el siguiente:

<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="@string/calendarsettings"> <CheckBoxPreference android:key="syncWithCalendar" android:title="@string/setting_calendarsync" android:summary="@string/setting_calendarsync"></CheckBoxPreference> <CheckBoxPreference android:key="calendarAlarm" android:title="@string/settings_calendaralarm" android:summary="@string/settings_calendaralarm"></CheckBoxPreference> </PreferenceCategory> <PreferenceCategory android:title="@string/filters"> <ListPreference android:key="dayFilter" android:title="@string/dayfilter" android:summary="@string/dayfilter" android:entries="@array/dayFilterArray" android:entryValues="@array/dayFilterValues" /> </PreferenceCategory> </PreferenceScreen> 

Y mis valores de matriz son:

  <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="dayFilterArray"> <item>a</item> <item>b</item> <item>c</item> <item>d</item> <item>e</item> <item>f</item> <item>g</item> </string-array> <string-array name="dayFilterValues"> <item>0</item> <item>3</item> <item>7</item> <item>14</item> <item>30</item> <item>90</item> <item>365</item> </string-array> </resources> 

Sin embargo, cuando intento entrar en mi menú de preferencia se bloquea con la siguiente excepción:

 10-03 20:27:56.938: ERROR/AndroidRuntime(1111): Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String 

Que se refiere a esta línea de código:

  addPreferencesFromResource(R.xml.preferences); 

¿Alguna idea sobre esto y por qué está sucediendo? Gracias.

TRAZO DE PILA COMPLETA:

 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): FATAL EXCEPTION: main 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): java.lang.RuntimeException: Unable to start activity ComponentInfo{cPreferencesActivity}: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1748) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1764) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.app.ActivityThread.access$1500(ActivityThread.java:122) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1002) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.os.Handler.dispatchMessage(Handler.java:99) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.os.Looper.loop(Looper.java:132) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.app.ActivityThread.main(ActivityThread.java:4025) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at java.lang.reflect.Method.invokeNative(Native Method) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at java.lang.reflect.Method.invoke(Method.java:491) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at dalvik.system.NativeStart.main(Native Method) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java:203) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.preference.Preference.getPersistedString(Preference.java:1367) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.preference.ListPreference.onSetInitialValue(ListPreference.java:278) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.preference.Preference.dispatchSetInitialValue(Preference.java:1283) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.preference.Preference.onAttachedToHierarchy(Preference.java:1095) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.preference.PreferenceGroup.addPreference(PreferenceGroup.java:156) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.preference.PreferenceGroup.addItemFromInflater(PreferenceGroup.java:97) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.preference.PreferenceGroup.addItemFromInflater(PreferenceGroup.java:38) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.preference.GenericInflater.rInflate(GenericInflater.java:488) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.preference.GenericInflater.rInflate(GenericInflater.java:493) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.preference.GenericInflater.inflate(GenericInflater.java:326) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.preference.GenericInflater.inflate(GenericInflater.java:263) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:269) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:1333) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at PreferencesActivity.onCreate(PreferencesActivity.java:33) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1712) 10-03 21:13:06.828: ERROR/AndroidRuntime(3045): ... 11 more 

2 Solutions collect form web for “Android se estrella en ListPreference”

Has persistido un número Integer antes en las preferencias. ListActivity espera que una String falle.

Simplemente llame a este código al principio de onCreate para eliminar el valor incorrecto y esto debe arreglarse:

 PreferenceManager.getDefaultSharedPreferences(this).edit().remove("dayFilter").commit(); 

Si todavía sucede que usted está utilizando probablemente el dayFilter dos veces como llave para diversas preferencias o persiste esa llave en sus los propios como Integer en alguna parte en su código.

Si esto no funciona, intente eliminar sus preferencias de esta ubicación:

 /data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PREFS_NAME.xml /data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PACKAGE_NAME_preferences.xml // on some devices /dbdata/databases/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PREFS_NAME.xml 

Si esto falla, intenta desinstalar la aplicación para que se eliminen (esto no funciona en mi Samsung Galaxy S – las preferencias compartidas no se eliminan …)

Su archivo XML no está escrito correctamente, usted declara una matriz de cadenas, pero proporciona enteros de ahí la excepción Cast.

  <string-array name="dayFilterValues"> <item>0</item> ... <item>365</item> </string-array> 

Para corregirlo simplemente coloque comillas alrededor de los valores enteros:

 <item>"365"</item> 

Entonces en tu aplicación necesitas analizar la cadena en un entero con:

 int value = Integer.parseInt(str); 
  • ¿Pueden las aplicaciones de Android tener sus variables leídas / fijadas malévola?
  • Pregunta la ayuda sobre el problema de lectura de AndroidManifest.xml
  • Deserializar JSON a Java enum
  • Cambiar permisos de archivo en DDMS (Android)
  • La recolección de basura no se activa en la aplicación cuando se habilita LargeHeap, lo que resulta en OOM
  • SetAlpha para ver programaticamente
  • Parece java clase estática interna, pero al parecer no es (no lo entiendo, ¿cómo es esto posible?)
  • ¿Cómo pasar un objeto personalizado en Bundle?
  • Excepción "Caracteres ilegales en la consulta en el índice -" en Android
  • Firebase Database - la técnica "Fan Out"
  • Recibir mensaje de difusión en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.