2013-03-08 50 views
28

我已將應用程序暫時存儲在存儲中一段時間​​,但它偶爾會根據開發人員控制檯中的崩潰報告崩潰,並說: java.lang.ClassCastException in android.widget.ProgressBar.onRestoreInstanceState與堆棧跟蹤:android.widget.ProgressBar.onRestoreInstanceState中的Unexplainable ClassCastException

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 

這些崩潰的原因沒有迴避我,我無法在我的任何設備上重現它。我沒有在任何地方覆蓋onRestoreInstanceState。任何人都可以指出我有意義的方向嗎?

+0

你能發佈你的設備信息嗎? – petey 2013-03-08 16:05:52

回答

61

我以前見過類似的問題,這是因爲你有兩個共享同一個名字的id。

onRestoreInstanceState已執行findViewById方法和第一個要查找的視圖不是ProgressView

仔細檢查您的應用程序不會重新在兩個不同的地方

+0

在活動中使用的所有視圖中有兩個不同的位置? – MrJre 2013-03-08 16:10:05

+0

是的,有可能你在活動中複製了id。如果您發佈上面的xml佈局,我可以幫助更好地診斷問題。 – jimmithy 2013-03-08 16:53:11

+0

我不使用XML很多,我基本上只設置ID來佈局'RelativeLayout'中的一些視圖。我想我只需確保沒有兩個視圖具有相同的ID;我會回到這個。 – MrJre 2013-03-10 13:29:16

7

相同的ID我有一個不同的問題:在一個佈局的根是滾動型,而在另一根是包含在滾動型RelativeView 。所有小部件ID都是相同的,沒有重複。在旋轉的崩潰日誌是:

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

一旦我相匹配的佈局(所以在這兩個根源是無論是RelativeLayout的滾動型或),旋轉正常工作。

不知道爲什麼這會導致崩潰,因此任何見解將不勝感激......

1

我得到了這個旋轉崩潰訊息話題時,我有兩個不同的佈局一個GridView,一個肖像和其他景點。一個被包含在一個FrameLayout中,另一個不是,即它本身在佈局文件中。當我刪除包裝FrameLayout,一切正常。 (注:在GridView是主/視圖佈局的主端使用。)

該消息沒有出現,直到我升級我的搖籃設置來:

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' 

} 

他們以前這樣的:

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

看來棉花糖對這個錯誤更加無情。

2

在我的情況下,我的肖像xml具有相同ID的landscape xml中的RelativelayoutScrollView

在我的活動課我嘗試膨脹的佈局,所以當屏幕旋轉發生,它拋出它分配上ViewGroup

java.lang.ClassCastException: android.view.AbsSavedState$1不能轉換爲android.widget.ScrollView$SavedState

這是因爲ScrollView延伸FrameLayoutRelativelayout延伸ViewGroup

所以我只是用景觀xml包裝Relativelayout並解決問題