View onRestoreInstanceState ClassCastException
遇到了一个难缠的问题,搜了N天的没有解决:
07-0215:40:25.415:D/LocateService(6711):onLocationChanged:AMapLocationlocation=Location[lbs0.000000,0.000000acc=0t=?!?et=?!?{Bundle[{adcode=,citycode=,desc=}]}]07-0215:40:25.425:D/AMapLocateListener(6711):onLocationChanged:location=Location[lbs0.000000,0.000000acc=0t=?!?et=?!?{Bundle[{adcode=,citycode=,desc=}]}]07-0215:40:25.475:I/AuthFailure(6711):INVALID_USER_SCODE07-0215:40:29.105:D/GatewayPresentor(6711):logout:component=push07-0215:40:29.105:D/GatewayComponent(6711):logout07-0215:40:29.105:W/GatewayComponent(6711):mLogged=false,mSender=com.autonavi.connector.clientsdk.Sender@432462d807-0215:40:29.105:D/WorkOrderFragment(6711):onDetach07-0215:40:29.105:D/OrderFragment(6711):onDetach07-0215:40:29.115:D/GatewayPresentor(6711):login:component=push,accessKey=2,userId=2,token=5ad04ba7-de02-4203-a077-a79581c8925207-0215:40:29.115:D/GatewayComponent(6711):login:accessKey=2,userId=2,token=5ad04ba7-de02-4203-a077-a79581c8925207-0215:40:29.115:I/Sender(6711):生成消息号:616681209340520038707-0215:40:29.125:D/ReadableDatabaseHelper(6711):query:distinct=false,table=TWorkOrder,columns=null,selection=create_time>=datetime('2015-07-0215:38:29'),selectionArgs=null,groupBy=null,having=null,orderBy=null,limit=null07-0215:40:29.125:D/OrderFragment(6711):onAttach07-0215:40:29.155:D/AndroidRuntime(6711):ShuttingdownVM07-0215:40:29.155:W/dalvikvm(6711):threadid=1:threadexitingwithuncaughtexception(group=0x4173cd58)07-0215:40:29.155:E/AndroidRuntime(6711):FATALEXCEPTION:main07-0215:40:29.155:E/AndroidRuntime(6711):Process:com.autonavi.taoparking.parker,PID:671107-0215:40:29.155:E/AndroidRuntime(6711):java.lang.RuntimeException:UnabletostartactivityComponentInfo{com.autonavi.taoparking.parker/com.autonavi.taoparking.parker.ManageOrderActivity}:java.lang.ClassCastException:android.view.AbsSavedState$1cannotbecasttoandroid.widget.HorizontalScrollView$SavedState07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2190)07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2239)07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3730)07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.app.ActivityThread.access$900(ActivityThread.java:141)07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.app.ActivityThread$H.handleMessage(ActivityThread.java:1208)07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.os.Handler.dispatchMessage(Handler.java:102)07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.os.Looper.loop(Looper.java:136)07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.app.ActivityThread.main(ActivityThread.java:5047)07-0215:40:29.155:E/AndroidRuntime(6711):atjava.lang.reflect.Method.invokeNative(NativeMethod)07-0215:40:29.155:E/AndroidRuntime(6711):atjava.lang.reflect.Method.invoke(Method.java:515)07-0215:40:29.155:E/AndroidRuntime(6711):atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:806)07-0215:40:29.155:E/AndroidRuntime(6711):atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)07-0215:40:29.155:E/AndroidRuntime(6711):atdalvik.system.NativeStart.main(NativeMethod)07-0215:40:29.155:E/AndroidRuntime(6711):Causedby:java.lang.ClassCastException:android.view.AbsSavedState$1cannotbecasttoandroid.widget.HorizontalScrollView$SavedState07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.widget.HorizontalScrollView.onRestoreInstanceState(HorizontalScrollView.java:1659)07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.view.View.dispatchRestoreInstanceState(View.java:12810)07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2637)07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2643)07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2643)07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.view.View.restoreHierarchyState(View.java:12788)07-0215:40:29.155:E/AndroidRuntime(6711):atcom.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1744)07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.app.Activity.onRestoreInstanceState(Activity.java:955)07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.app.Activity.performRestoreInstanceState(Activity.java:927)07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1138)07-0215:40:29.155:E/AndroidRuntime(6711):atandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168)07-0215:40:29.155:E/AndroidRuntime(6711):...12more07-0215:40:31.695:I/Sender(6711):..............发送心跳07-0215:40:31.825:I/Sender(6711):重试连接到服务器07-0215:40:31.885:W/System.err(6711):java.net.ConnectException:failedtoconnectto/120.26.196.74(port10000):connectfailed:ECONNREFUSED(Connectionrefused)07-0215:40:31.885:W/System.err(6711):atlibcore.io.IoBridge.connect(IoBridge.java:114)07-0215:40:31.885:W/System.err(6711):atjava.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)07-0215:40:31.885:W/System.err(6711):atjava.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)07-0215:40:31.885:W/System.err(6711):atjava.net.Socket.startupSocket(Socket.java:566)07-0215:40:31.885:W/System.err(6711):atjava.net.Socket.tryAllAddresses(Socket.java:128)07-0215:40:31.885:W/System.err(6711):atjava.net.Socket.<init>(Socket.java:178)07-0215:40:31.885:W/System.err(6711):atjava.net.Socket.<init>(Socket.java:150)07-0215:40:31.885:W/System.err(6711):atcom.autonavi.connector.clientsdk.ClientContext$1.run(ClientContext.java:74)07-0215:40:31.885:W/System.err(6711):atjava.lang.Thread.run(Thread.java:841)07-0215:40:31.885:W/System.err(6711):Causedby:libcore.io.ErrnoException:connectfailed:ECONNREFUSED(Connectionrefused)07-0215:40:31.885:W/System.err(6711):atlibcore.io.Posix.connect(NativeMethod)07-0215:40:31.885:W/System.err(6711):atlibcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)07-0215:40:31.885:W/System.err(6711):atlibcore.io.IoBridge.connectErrno(IoBridge.java:127)07-0215:40:31.885:W/System.err(6711):atlibcore.io.IoBridge.connect(IoBridge.java:112)07-0215:40:31.885:W/System.err(6711):...8more07-0215:40:31.885:W/Sender(6711):failedtoconnectto/120.26.196.74(port10000):connectfailed:ECONNREFUSED(Connectionrefused)07-0215:40:41.695:I/Sender(6711):..............发送心跳07-0215:40:41.885:I/Sender(6711):重试连接到服务器07-0215:40:41.945:W/GatewayComponent(6711):mLogAction=LOGIN,failure:code=-2004,message=发送消息没有回执确认07-0215:40:41.945:D/GatewayService(6711):mLocationLog.onFailed:code=-2004,message=发送消息没有回执确认07-0215:40:41.945:W/System.err(6711):java.net.ConnectException:failedtoconnectto/120.26.196.74(port10000):connectfailed:ECONNREFUSED(Connectionrefused)07-0215:40:41.945:W/System.err(6711):atlibcore.io.IoBridge.connect(IoBridge.java:114)07-0215:40:41.945:W/System.err(6711):atjava.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)07-0215:40:41.945:W/System.err(6711):atjava.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)07-0215:40:41.945:W/System.err(6711):atjava.net.Socket.startupSocket(Socket.java:566)07-0215:40:41.945:W/System.err(6711):atjava.net.Socket.tryAllAddresses(Socket.java:128)07-0215:40:41.945:W/System.err(6711):atjava.net.Socket.<init>(Socket.java:178)07-0215:40:41.945:W/System.err(6711):atjava.net.Socket.<init>(Socket.java:150)07-0215:40:41.945:W/System.err(6711):atcom.autonavi.connector.clientsdk.ClientContext$1.run(ClientContext.java:74)07-0215:40:41.945:W/System.err(6711):atjava.lang.Thread.run(Thread.java:841)07-0215:40:41.945:W/System.err(6711):Causedby:libcore.io.ErrnoException:connectfailed:ECONNREFUSED(Connectionrefused)07-0215:40:41.945:W/System.err(6711):atlibcore.io.Posix.connect(NativeMethod)07-0215:40:41.945:W/System.err(6711):atlibcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)07-0215:40:41.945:W/System.err(6711):atlibcore.io.IoBridge.connectErrno(IoBridge.java:127)07-0215:40:41.945:W/System.err(6711):atlibcore.io.IoBridge.connect(IoBridge.java:112)07-0215:40:41.945:W/System.err(6711):...8more07-0215:40:41.945:W/Sender(6711):failedtoconnectto/120.26.196.74(port10000):connectfailed:ECONNREFUSED(Connectionrefused)07-0215:40:43.935:W/GatewayComponent(6711):mLogAction=LOGIN,failure:code=-2004,message=发送消息没有回执确认07-0215:40:43.935:D/GatewayService(6711):mPushLog.onFailed:code=-2004,message=发送消息没有回执确认
网上大部分人都说是因为同一个页面(Activity),不同的View使用了相同的ID,导致在恢复时,findViewById,强制转换SaveState类型错误,可是我对比了半天整个工程中就一个SlidingTabLayout(继承HorizontalScrollView)使用了android:id="@+id/slidingTabLayout",应该不是网友说的这种情况,但是我也不知道为什么传的AbsSavedState$1给HorizontalScrollView,无奈去翻源码:
@OverrideprotectedvoidonRestoreInstanceState(Parcelablestate){if(mContext.getApplicationInfo().targetSdkVersion<=Build.VERSION_CODES.JELLY_BEAN_MR2){//SomeoldappsreusedIDsinwaystheyshouldn'thave.//Don'tbreakthem,buttheydon'tgetscrollstaterestoration.super.onRestoreInstanceState(state);return;}SavedStatess=(SavedState)state;super.onRestoreInstanceState(ss.getSuperState());mSavedState=ss;requestLayout();}
大概意思就是在Android API 18(4.2.2和4.4.2之间的一个版本)以前,不会保存ScrollView的滚动条位置,这个对我影响也不是很大,规避这个问题我能想到有如下两种:
将AndroidMainifest.xml中android:targetSdkVersion降为18以下(如果需要记录这个状态,可以在onSaveInstanceState中记录位置,onRestoreInstanceState中恢复就可以了);
不让View保存状态:
android:saveEnabled="false"|setSaveEnabled(false)|不要给view设置id
/***Calledby{@link#saveHierarchyState(android.util.SparseArray)}tostorethestatefor*thisviewanditschildren.Maybeoverriddentomodifyhowfreezinghappenstoa*view'schildren;forexample,someviewsmaywanttonotstorestatefortheirchildren.**@paramcontainerTheSparseArrayinwhichtosavetheview'sstate.**@see#dispatchRestoreInstanceState(android.util.SparseArray)*@see#saveHierarchyState(android.util.SparseArray)*@see#onSaveInstanceState()*/protectedvoiddispatchSaveInstanceState(SparseArray<Parcelable>container){if(mID!=NO_ID&&(mViewFlags&SAVE_DISABLED_MASK)==0){mPrivateFlags&=~PFLAG_SAVE_STATE_CALLED;Parcelablestate=onSaveInstanceState();if((mPrivateFlags&PFLAG_SAVE_STATE_CALLED)==0){thrownewIllegalStateException("Derivedclassdidnotcallsuper.onSaveInstanceState()");}if(state!=null){//Log.i("View","Freezing#"+Integer.toHexString(mID)//+":"+state);container.put(mID,state);}}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。