2013-03-08 66 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并解决问题