2013-03-08 14 views
28

Moja aplikacja została przez jakiś czas wyłączona, ale wygląda na to, że od czasu do czasu zdarzają się awarie, zgodnie z raportami o awariach w Konsoli programisty, mówiąc: java.lang.ClassCastException in android.widget.ProgressBar.onRestoreInstanceState ze stosem trace:Niewyobrażalne Wyjątek ClassCastException w 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 

Powód tych awarii wymyka mi się, i nie mogę odtworzyć go na żadnym z moich urządzeń. Nie mam w każdym razie przesłoniętego onRestoreInstanceState. Czy ktoś może wskazać mi kierunek, który ma sens?

+0

Czy możesz podać informacje o urządzeniu, które posiadasz? – petey

Odpowiedz

61

Wcześniej widziałem podobne problemy, a to dlatego, że masz dwa identyfikatory, które mają takie samo imię.

Przeprowadzono onRestoreInstanceState metodę findViewById, a pierwszy widok, który można znaleźć, nie był ProgressView.

dwukrotnie sprawdzić, czy aplikacja nie używać tego samego identyfikatora w dwóch różnych miejscach

+0

W dwóch różnych miejscach masz na myśli wszystkie widoki użyte w działaniu? – MrJre

+0

Tak, jest szansa, że ​​duplikujesz identyfikatory w działaniu. Jeśli umieścisz powyższy układ xml, być może uda mi się lepiej zdiagnozować problem. – jimmithy

+0

Nie używam XML w dużym stopniu, w zasadzie ustawiam identyfikatory tylko do układu niektórych widoków w 'RelativeLayout'. Sądzę, że po prostu muszę się upewnić, że żadne dwa widoki nie mają tego samego identyfikatora; Wrócę do tego. – MrJre

7

miałem inny problem: W jednym układzie korzeń był Scrollview natomiast w drugiej korzeń był RelativeView który zawierał Scrollview . Wszystkie identyfikatory widgetów były identyczne i nie było żadnych duplikatów. Na obracania dziennik katastrofy było:

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

Raz dopasowane układy (a więc zarówno korzeń był albo RelativeLayout lub Scrollview), obrót działało.

Nie wiem, dlaczego miałoby to spowodować awarię więc wszelkie spostrzeżenia będą mile widziane ...

1

Mam ten zderzenia messsage na obrót, gdy miałem GridView w dwóch różnych układach, jeden portret i inne krajobraz. Jedna została zawarta w FrameLayout, a druga nie, tzn. Sama w pliku układu. Kiedy usunąłem opakowanie FrameLayout, wszystko działało dobrze. (Uwaga: GridView został użyty po stronie kapitana master/widoku układu.)

komunikat nie pojawia się aż zmodernizowane moje ustawienia Gradle do tego:

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' 

} 

Byli poprzednio to:

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

Wygląda na to, że Marshmallow jest bardziej bezlitosny w przypadku tego błędu.

2

W moim przypadku mój portret xml ma Relativelayout i ScrollView z pejzażu xml o tym samym ID.

W mojej klasie działalności staram się napompować układ i przypisać go na ViewGroup

Więc kiedy rotacja ekranu wystąpić rzuca: java.lang.ClassCastException: android.view.AbsSavedState$1 nie mogą być oddane do android.widget.ScrollView$SavedState

To dlatego, że ScrollView rozciąga FrameLayout podczas Relativelayout rozszerza ViewGroup

Po prostu pakuję xml krajobrazu z Relativelayout i rozwiązuje problem