2013-03-08 15 views
28

Ho avuto la mia applicazione in negozio per un po ', ma sembra che si blocchi occasionalmente in base ai rapporti sugli arresti anomali nella Console per gli sviluppatori, dicendo: java.lang.ClassCastException in android.widget.ProgressBar.onRestoreInstanceState con lo stack Traccia:Inspiegabile ClassCastException in android.widget.ProgressBar.onRestoreInstanceState

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 ragione di questi incidenti mi sfugge, e non riesco a riprodurre su uno dei miei dispositivi. Non ho uno onRestoreInstanceState sovrascritto da nessuna parte. Qualcuno può indicarmi una direzione che abbia senso?

+0

Potresti pubblicare informazioni sul dispositivo che hai? – petey

risposta

61

Ho già riscontrato problemi simili a questo, ed è perché hai due ID che condividono lo stesso nome.

Il onRestoreInstanceState ha eseguito il metodo findViewById e la prima vista trovata non era ProgressView.

Doppia verificare che l'applicazione non riutilizzare lo stesso ID in due posti diversi

+0

Con due luoghi diversi intendi all'interno di tutte le viste utilizzate nell'attività? – MrJre

+0

Sì, è probabile che si stiano duplicando gli ID nell'attività. Se pubblichi il tuo layout xml qui sopra, potrei essere in grado di aiutarti a diagnosticare meglio il problema. – jimmithy

+0

Non uso molto XML, in pratica ho solo impostato gli id ​​per impaginare alcune viste in un 'RelativeLayout'. Immagino che dovrò solo assicurarmi che nessuna vista abbia lo stesso Id; Tornerò su questo. – MrJre

7

Ho avuto un problema diverso: In un layout radice era uno ScrollView mentre nell'altro la radice era un RelativeView che conteneva lo ScrollView . Tutti gli ID dei widget erano identici e non c'erano duplicati. Sul ruotare il registro incidente era:

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

Una volta ho abbinato i layout (così sia la radice era o la RelativeLayout o ScrollView), la rotazione ha funzionato bene.

Non capisco perché questo potrebbe causare un crash in modo che qualsiasi intuizioni sarebbe apprezzato ...

1

ho avuto questo incidente messsage a rotazione quando ho avuto un GridView in due layout differenti, uno verticale e l'altro paesaggio. Uno era contenuto in un FrameLayout e l'altro no, cioè era di per sé nel file di layout. Quando ho rimosso il wrapping FrameLayout, tutto ha funzionato bene. (Nota: il GridView è stato utilizzato sul lato comandante di una/layout di visualizzazione master.)

Il messaggio non ha assunto fino a quando ho aggiornato le mie impostazioni Gradle a questo:

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' 

} 

Erano questa:

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' 
} 

Sembra che Marshmallow sia più spietato con questo bug.

2

Nel mio caso il mio ritratto xml ha Relativelayout e ScrollView da orizzontale xml con lo stesso ID.

Sulla mia classe di attività cerco di gonfiare il layout e assegnarlo a ViewGroup

Così, quando la rotazione dello schermo si verificano getta: java.lang.ClassCastException: android.view.AbsSavedState$1 non può essere gettato a android.widget.ScrollView$SavedState

E 'perché il ScrollView estende FrameLayout mentre Relativelayout si estende ViewGroup

Quindi mi basta avvolgere il panorama xml con Relativelayout e risolve il problema

Problemi correlati