Rynardt
Rynardt

Reputation: 5557

Do not understand java.lang.ClassCastException error in Android

I received an error report for an Android application via Acra. There is no reference to a line number in my code in the stack trace. How do I know were the problem lies with my code? Could anyone please assist me.

Stack trace:

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)

My code com.itse.htsurvey.Question2Page2Activity: http://pastebin.com/gPYyZ0GH

Edit 1: Some more information - I think it might be because of a widget Id conflict. The savedState part indicates that this happened after an Activity recreation? This layout consists of dynamically added views/layouts and they are given id's at runtime.

Edit 2: Just to confirm that in al the testing done, this is the first time I have received this error. I have not been able to reproduce it.

Edit 3: I was able to reproduce the error when I changed the orientation of the device. How do I then fix this?

Upvotes: 1

Views: 2851

Answers (4)

David T.
David T.

Reputation: 23371

One thing that is confusing is that in the code, it looks like you are referencing views by their raw id int. I'm actually not entirely sure what your code does but... this can be pretty messed up and cause Android to find the wrong view (maybe that's why you are getting an error about some error regarding views that you're not even using, like AbsSpinner). For example, the code uses:

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

so instead of doing things like that, your last "findViewById(i)" should refer to something that is generated by reference like you had done with "findViewById(R.id.tr1)".

to verify, delete your R.java in your "gen" folder in Eclipse, clean your project, build your project, and see if you can reproduce the error. your app should(?) crash

Upvotes: 2

Rynardt
Rynardt

Reputation: 5557

After reading up on onSaveInstanceState and onRestoreInstanceState. I added the following code. I am already saving the state of all of the views, so no need for the default implementation of onSaveInstanceState and onRestoreInstanceStat.

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

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {

    }

Upvotes: 3

sakthisundar
sakthisundar

Reputation: 3288

You are trying to use

android.widget.CompoundButton$SavedState

object instead of

android.widget.AbsSpinner$SavedState.

Just try checking the imported classes whether have you rightly imported appropriate class.

Upvotes: 0

slezadav
slezadav

Reputation: 6141

Looks like you can't cast Compound button to Spinner. You can use compound button only as CheckBox, RadioButton, Switch, ToggleButton, but not Spinner.

Upvotes: 0

Related Questions