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?
- Coordenadas incorrectas de getLocationOnScreen / getLocationInWindow
- Cómo poner divisor en posición particular en una vista de lista de Android
- Cómo mostrar 2 vistas de texto en la misma línea en Android
- Permitir a los usuarios introducir un nuevo valor en Spinner
- Alinear elementos del menú de opciones (en ActionBar)
- ¿Acceso estático a los recursos de una aplicación para Android?
- Actualización del widget de aplicación mediante AlarmManager
- FindViewById (int) devuelve null para vistas personalizadas, pero no incorpora Android
- Cargar imágenes en ImageView en Android
- Android: My App Widget con ListView no se actualiza a través del botón o período de actualización
- ImageView dentro de RelativeLayout tiene relleno superior e inferior
- ¿Es posible cambiar el color de ScrollBar?
- Cómo cambiar las imágenes predeterminadas de CheckBox
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
- Localhost corriendo en mac .. ¿Puedo verlo en mi teléfono Android?
- La llamada requiere el nivel 16 de API (el min actual es 14): android.app.Notification.Builder # build