Inexplicable ClassCastException en android.widget.ProgressBar.onRestoreInstanceState

He tenido mi aplicación en la tienda por un tiempo, pero parece que se bloquea de vez en cuando de acuerdo con los informes de fallo en la consola del desarrollador, diciendo: java.lang.ClassCastException in android.widget.ProgressBar.onRestoreInstanceState con el seguimiento de pila:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.company.myapp/com.mycompany.myapp.activity.MyActivity}: java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.widget.ProgressBar$SavedState at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1996) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2023) at android.app.ActivityThread.access$600(ActivityThread.java:127) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1174) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4503) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.widget.ProgressBar$SavedState at android.widget.ProgressBar.onRestoreInstanceState(ProgressBar.java:1093) at android.view.View.dispatchRestoreInstanceState(View.java:9975) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2408) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2408) at android.view.View.restoreHierarchyState(View.java:9951) at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1611) at android.app.Activity.onRestoreInstanceState(Activity.java:908) at android.app.Activity.performRestoreInstanceState(Activity.java:880) at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1102) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974) ... 11 more 

La razón de estos choques me escapa, y no puedo reproducirlo en ninguno de mis dispositivos. Yo no tengo un onRestoreInstanceState anulado en cualquier lugar tampoco. ¿Puede alguien señalarme en una dirección que tiene sentido?

He visto problemas similares a esto antes, y es porque tienes dos id que comparten el mismo nombre.

El onRestoreInstanceState ha realizado el método findViewById y la primera vista que se encontró no era el ProgressView .

Compruebe que su aplicación no vuelva a usar el mismo ID en dos lugares diferentes

Tenía un problema diferente: En un diseño la raíz era un ScrollView mientras que en el otro la raíz era un RelativeView que contenía el ScrollView. Todos los identificadores de widgets eran idénticos y no había duplicados. Al girar el registro de bloqueo fue:

 java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.widget.ScrollView$SavedState 

Una vez que coincidía con los diseños (por lo tanto en la raíz era el RelativeLayout o ScrollView), la rotación funcionó bien.

No estoy seguro de por qué esto causaría un accidente, así que cualquier idea sería apreciada …

Conseguí este messsage del desplome en la rotación cuando tenía un GridView en dos diversas disposiciones, un retrato y el otro paisaje. Uno estaba contenido en un FrameLayout y el otro no, es decir, estaba por sí mismo en el archivo de diseño. Cuando quité el FrameLayout que envuelve, todo trabajó muy bien. (Nota: el GridView se usó en el lado maestro de un diseño maestro / vista).

El mensaje no apareció hasta que actualizé la configuración de Gradle a esta:

 android { compileSdkVersion 23 buildToolsVersion '23.0.2' defaultConfig { applicationId 'com.example.android.redacted.app' minSdkVersion 16 targetSdkVersion 23 versionCode 1 versionName "1.0" } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:23.1.1' } 

Anteriormente eran:

 android { compileSdkVersion 21 buildToolsVersion '21.1.2' defaultConfig { applicationId 'com.example.android.redacted.app' minSdkVersion 11 targetSdkVersion 21 versionCode 1 versionName "1.0" } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:21.0.2' } 

Parece que Marshmallow es más implacable con este insecto.

En mi caso mi retrato xml tiene Relativelayout y ScrollView de xml del paisaje con el mismo ID.

En mi clase de actividad intento inflar el diseño y asignarlo en ViewGroup

Por lo tanto, cuando la rotación de la pantalla se produce: java.lang.ClassCastException: android.view.AbsSavedState$1 no se puede convertir en android.widget.ScrollView$SavedState

Es porque ScrollView extiende FrameLayout mientras Relativelayout extiende ViewGroup

Así que sólo envuelve el paisaje xml con Relativelayout y resuelve el problema

  • ¿Cómo recuperar las dimensiones de una vista?
  • Android: ¿Cómo hacer la animación flip para la actividad de Android, al igual que el iphone flip horizontal de izquierda a derecha?
  • Barra de puntuación que muestra sólo media estrella en lugar de estrella completa
  • Cómo guardar el lienzo de dibujo en android?
  • ¿Cómo mostrar el título del diálogo en una línea múltiple?
  • Android: varios appWidgets que reproducen diferentes sonidos
  • Android obtener la posición del elemento seleccionado en gridview
  • Android ListView: cómo seleccionar un elemento?
  • Uso de ViewPager caches Fragmentos después de la rotación de la pantalla?
  • Android getMeasuredHeight devuelve valores erróneos!
  • Inicie Android Widget de la actividad
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.