Reputation: 5557
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
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
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
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
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