1

Acra 経由で Android アプリケーションのエラー レポートを受け取りました。スタック トレースのコードに行番号への参照がありません。問題が自分のコードにあることをどうやって知ることができますか? 誰でも私を助けてください。

スタックトレース:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.itse.htsurvey/com.itse.htsurvey.Question2Page2Activity}: java.lang.ClassCastException: android.widget.CompoundButton$SavedState cannot be cast to android.widget.AbsSpinner$SavedState
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1815)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3188)
        at android.app.ActivityThread.access$600(ActivityThread.java:122)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1028)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:132)
        at android.app.ActivityThread.main(ActivityThread.java:4123)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:491)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
        at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassCastException: android.widget.CompoundButton$SavedState cannot be cast to android.widget.AbsSpinner$SavedState
        at android.widget.AbsSpinner.onRestoreInstanceState(AbsSpinner.java:421)
        at android.view.View.dispatchRestoreInstanceState(View.java:8316)
        at android.view.ViewGroup.dispatchThawSelfOnly(ViewGroup.java:2038)
        at android.widget.AdapterView.dispatchRestoreInstanceState(AdapterView.java:766)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2024)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2024)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2024)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2024)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2024)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2024)
        at android.view.View.restoreHierarchyState(View.java:8295)
        at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1489)
        at android.app.Activity.onRestoreInstanceState(Activity.java:898)
        at android.app.Activity.performRestoreInstanceState(Activity.java:870)
        at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1099)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1793)
        ... 12 more
java.lang.ClassCastException: android.widget.CompoundButton$SavedState cannot be cast to android.widget.AbsSpinner$SavedState
        at android.widget.AbsSpinner.onRestoreInstanceState(AbsSpinner.java:421)
        at android.view.View.dispatchRestoreInstanceState(View.java:8316)
        at android.view.ViewGroup.dispatchThawSelfOnly(ViewGroup.java:2038)
        at android.widget.AdapterView.dispatchRestoreInstanceState(AdapterView.java:766)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2024)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2024)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2024)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2024)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2024)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2024)
        at android.view.View.restoreHierarchyState(View.java:8295)
        at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1489)
        at android.app.Activity.onRestoreInstanceState(Activity.java:898)
        at android.app.Activity.performRestoreInstanceState(Activity.java:870)
        at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1099)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1793)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3188)
        at android.app.ActivityThread.access$600(ActivityThread.java:122)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1028)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:132)
        at android.app.ActivityThread.main(ActivityThread.java:4123)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:491)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
        at dalvik.system.NativeStart.main(Native Method)

私のコード com.itse.htsurvey.Question2Page2Activity: http://pastebin.com/gPYyZ0GH

編集 1: いくつかの詳細情報 - ウィジェット ID の競合が原因である可能性があります。savedState 部分は、これがアクティビティの再作成後に発生したことを示していますか? このレイアウトは、動的に追加されたビュー/レイアウトで構成され、実行時に ID が与えられます。

編集 2: すべてのテストが完了したことを確認するために、このエラーを受け取ったのはこれが初めてです。私はそれを再現することができませんでした。

編集 3: デバイスの向きを変更したときにエラーを再現できました。どうすればこれを修正できますか?

4

4 に答える 4

3

onSaveInstanceState と onRestoreInstanceState を読んだ後。次のコードを追加しました。すべてのビューの状態を既に保存しているので、onSaveInstanceState と onRestoreInstanceStat のデフォルトの実装は必要ありません。

@Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        saveEnteredData();  
    }

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {

    }
于 2012-08-29T10:11:58.157 に答える
2

紛らわしい点の 1 つは、コード内で生の ID int でビューを参照しているように見えることです。私は実際にあなたのコードが何をしているのか完全にはわかりませんが...これはかなり混乱し、Androidが間違ったビューを見つける原因となる可能性があります(おそらく、使用していないビューに関するエラーについてエラーが発生するのはそのためです) 、AbsSpinner など)。たとえば、コードは次を使用します。

CheckBox cb1 = (CheckBox) ll2_8.getChildAt(i).findViewById(R.id.tl1).findViewById(R.id.tr1).findViewById(i);

そのようなことを行う代わりに、最後の「findViewById(i)」は、「findViewById(R.id.tr1)」で行ったように、参照によって生成されたものを参照する必要があります。

検証するには、Eclipse の「gen」フォルダーにある R.java を削除し、プロジェクトをクリーンアップしてプロジェクトをビルドし、エラーを再現できるかどうかを確認します。あなたのアプリは(?)クラッシュするはずです

于 2012-08-28T08:32:56.633 に答える
0

使用しようとしています

android.widget.CompoundButton $ SavedState

代わりにオブジェクト

android.widget.AbsSpinner$SavedState。

インポートされたクラスをチェックして、適切なクラスを正しくインポートしたかどうかを確認してください。

于 2012-08-28T08:17:59.570 に答える
0

複合ボタンをスピナーにキャストできないようです。複合ボタンは、CheckBox、RadioButton、Switch、ToggleButtonとしてのみ使用できますが、Spinnerとしては使用できません。

于 2012-08-28T08:17:34.910 に答える