2013-03-08 8 views
28

Ich hatte meine Anwendung für eine Weile im Geschäft, aber es scheint, dass es gelegentlich nach den Absturzberichten in der Entwicklerkonsole stürzt, sagen: java.lang.ClassCastException in android.widget.ProgressBar.onRestoreInstanceState mit dem Stapel Spur:Unerklärliche 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 

Der Grund für diese Abstürze entzieht sich mir, und ich kann es nicht reproduzieren auf keinem meiner Geräte. Ich habe keine onRestoreInstanceState irgendwo außer Kraft gesetzt. Kann mir jemand in eine Richtung zeigen, die Sinn macht?

+0

Können Sie Geräteinformationen posten, die Sie haben? – petey

Antwort

61

Ich habe ähnliche Probleme bereits zuvor gesehen, und das liegt daran, dass zwei IDs denselben Namen haben.

Die onRestoreInstanceState hat die findViewById Methode durchgeführt und die erste gefundene Ansicht war nicht die ProgressView.

Überprüfen Sie, dass Ihre Anwendung nicht die gleiche ID an zwei verschiedenen Orten

+0

Mit zwei verschiedenen Orten meinen Sie alle in der Aktivität verwendeten Ansichten? – MrJre

+0

Ja, es besteht die Möglichkeit, dass du IDs in der Aktivität duplizierst. Wenn Sie Ihr XML-Layout oben veröffentlichen, kann ich möglicherweise helfen, das Problem besser zu diagnostizieren. – jimmithy

+0

Ich benutze XML nicht viel, ich setze im Grunde nur Ids, um einige Ansichten in einem 'RelativLayout' zu gestalten. Ich denke, ich muss nur sicherstellen, dass keine zwei Ansichten dieselbe ID haben. Ich komme darauf zurück. – MrJre

7

ich ein anderes Problem hatte nicht wiederverwendet werden: In einem Layout die Wurzel ein Scroll war, während in der anderen die Wurzel ein RelativeView war, dass die Scrollview enthalten . Alle Widgets-IDs waren identisch und es gab keine Duplikate. Am drehen war das Crash-Protokoll:

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

Sobald ich die Layouts angepasst (so sowohl die Wurzel entweder die RelativeLayout oder Scroll war), die Rotation funktionierte gut.

nicht sicher, warum dies zu einem Absturz führen würde so keine Erkenntnisse geschätzt würden ...

1

Ich habe diesen Absturz messsage auf Rotation, wenn ich in zwei verschiedenen Layouts ein Gridview hatte, ein Porträt und die andere Landschaft. Einer war in einem FrameLayout enthalten und der andere war nicht, d.h. er war selbst in der Layoutdatei. Als ich das umhüllende FrameLayout entfernte, funktionierte alles gut. (Hinweis: Die Gridview auf der Masterseite eines Master/View-Layout verwendet wurde.)

Die Meldung erscheint nicht, bis ich dazu meine Gradle Einstellungen aktualisiert:

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' 

} 

Sie diese vorher waren:

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

Es scheint, Marshmallow ist mit diesem Fehler unversöhnlicher.

2

In meinem Fall hat mein Porträt xml Relativelayout und ScrollView von Landschaft xml mit der gleichen ID.

Auf meiner Aktivitätsklasse versuche ich das Layout aufzublasen und weisen Sie auf ViewGroup

Also, wenn Bildschirmdrehung auftreten wirft: java.lang.ClassCastException: android.view.AbsSavedState$1 nicht

Es ist zu android.widget.ScrollView$SavedState gegossen werden, weil die ScrollViewFrameLayout während Relativelayout erstreckt extends ViewGroup

Also wickle ich einfach die Landschaft xml mit Relativelayout und löst das Problem

Verwandte Themen