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 fallos 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 bloqueos me elude, y no puedo reproducirla en ninguno de mis dispositivos. Tampoco tengo un onRestoreInstanceState
anulado en ninguna parte. ¿Alguien puede indicarme una dirección que tenga sentido?
4 answers
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 fue el ProgressView
.
Verifique que su aplicación no reutilice el mismo ID en dos lugares diferentes
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-09 21:42:16
Yo tenía un problema diferente: En un diseño de la raíz era un ScrollView mientras que en el otro la raíz era un RelativeView que contenía el ScrollView. Todos los id de widgets eran idénticos y no había duplicados. En rotar el registro de fallos fue:
java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.widget.ScrollView$SavedState
Una vez que hice coincidir los layouts (así que en ambos la raíz era RelativeLayout o ScrollView), la rotación funcionó bien.
No estoy seguro de por qué esto causaría un bloqueo, por lo que cualquier información sería apreciada...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-24 16:24:39
En mi caso mi xml vertical tiene Relativelayout
y ScrollView
desde xml horizontal con el mismo ID.
En mi clase de actividad intento inflar el diseño y asignarlo en ViewGroup
Así que cuando se produce la rotación de la pantalla se lanza:
java.lang.ClassCastException: android.view.AbsSavedState$1
no se puede lanzar a android.widget.ScrollView$SavedState
Es porque el ScrollView
se extiende FrameLayout
mientras que Relativelayout
se extiende ViewGroup
Así que simplemente envuelvo el xml horizontal con Relativelayout
y resuelve el problema
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-14 06:13:53
Obtuve este crash messsage en rotación cuando tenía un GridView en dos diseños diferentes, 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é la envoltura FrameLayout, todo funcionó bien. (Nota: el GridView se utilizó en el lado maestro de un diseño maestro/vista.)
El mensaje no apareció hasta que actualicé 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'
}
Eran anteriormente esto:
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 error.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-29 16:22:00