40

私はしばらくの間アプリケーションをストアに置いてきましたが、開発者コンソールのクラッシュレポートによると、時々クラッシュするようです。 java.lang.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

これらのクラッシュの理由は私にはわかりません、そして私は私のどのデバイスでもそれを再現することができません。onRestoreInstanceState私もどこにもオーバーライドされていません。誰かが私を意味のある方向に向けることができますか?

4

8 に答える 8

83

これと同様の問題を以前に見たことがありますが、これは、同じ名前を共有する2つのIDがあるためです。

はメソッドをonRestoreInstanceState実行しましたが、最初に見つかったビューはではありませんでした。findViewByIdProgressView

アプリケーションが2つの異なる場所で同じIDを再利用していないことを再確認してください

于 2013-03-08T16:06:58.283 に答える
9

別の問題がありました。1つのレイアウトではルートがScrollViewでしたが、もう1つのレイアウトではルートはScrollViewを含むRelativeViewでした。すべてのウィジェットIDは同一であり、重複はありませんでした。ローテーション時のクラッシュログは次のとおりです。

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

レイアウトを一致させると(つまり、両方のルートでRelativeLayoutまたはScrollViewのいずれかでした)、回転は正常に機能しました。

なぜこれがクラッシュを引き起こすのかわからないので、洞察をいただければ幸いです...

于 2015-07-24T16:24:39.260 に答える
3

私の場合、portraitxmlには同じIDのlandscapexmlがRelativelayoutあります。ScrollView

私のアクティビティクラスでは、レイアウトを膨らませて割り当てようとしますViewGroup

したがって、画面の回転が発生すると、次のようにスロー java.lang.ClassCastException: android.view.AbsSavedState$1されます。android.widget.ScrollView$SavedState

それは、ScrollView拡張FrameLayoutしながらRelativelayout拡張するためですViewGroup

だから私はランドスケープxmlをラップしRelativelayoutて問題を解決します

于 2016-11-14T05:21:35.463 に答える
3

私の場合、同じIDを持つ2つの異なるビューがありました。それらの1つはメインレイアウトにあり、もう1つはメインレイアウトにビューとして含まれている別のレイアウトにありました。IDの1つを変更しました。

于 2019-11-10T10:33:20.737 に答える
1

2つの異なるレイアウト(1つは縦向き、もう1つは横向き)のGridViewを使用したときに、回転時にこのクラッシュメッセージが表示されました。1つはFrameLayoutに含まれ、もう1つは含まれていませんでした。つまり、それ自体がレイアウトファイルに含まれていました。ラッピングFrameLayoutを削除すると、すべてが正常に機能しました。(注:GridViewは、マスター/ビューレイアウトのマスター側で使用されました。)

Gradle設定を次のようにアップグレードするまで、メッセージは表示されませんでした。

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

マシュマロはこのバグに対してより寛容ではないようです。

于 2016-01-29T16:22:00.677 に答える
1

同じIDで異な​​るレイアウトを使用する必要がありました。したがって、回避策は

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    try {
        super.onRestoreInstanceState(savedInstanceState);
    } catch (Exception ignored) {
    }
}

これにより、アプリケーションがクラッシュするのを防ぐことができます。

super.onRestoreInstanceState(savedInstanceState)ポイント例外が発生するまでのみ実行できます。ただし、少なくとも私のアプリでは役に立たないので、バイパスする余裕がありonRestoreInstanceStateます。

于 2020-03-24T13:32:37.620 に答える
0

場合によっては、次のように使用できます。復元状態中のエラーを回避するために、同じIDのビューに対してisSaveEnabled =false

于 2020-03-27T08:36:58.117 に答える
0

それは、id値の衝突なし<ProgressBar />で-を使用して私に起こりました。android:id="@+id/progress"私のアプリの外で、この事前定義された値を持つ既存のビューと関係があると思います。問題への変更android:id="@+id/progressBar"または問題の回避策。

于 2021-10-11T16:42:28.297 に答える