1

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?

4 Answers 4

3

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) {

    }
Sign up to request clarification or add additional context in comments.

Comments

2

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

3 Comments

I assign Id's to views during runtime,because I dynamically inflate views during runtime. The only way to access dynamically created views during runtime is to assign an id during runtime?
hmm... okay. well, it might not fix your problem, but there's another way of doing this. if you just keep a reference to the view in say... an ArrayList or some other container, that might make things safer.
ArrayList<CheckBox> checkBoxes = new ArrayList<CheckBox>(); public void initPage(){ for(int i=0; i< 10; i++) { checkBoxes.add(new CheckBox()); } //now you can reference any of the checkboxes anywhere in your class... }
0

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

Comments

0

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.

2 Comments

+1 for thought process, but i still don't understand since he doesn't even use AbsSpinner at all
I use a custom spinner implementation

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.