在打开pdf阅读器后,LinearLayout上的NotSerializableException

时间:2015-04-10 09:06:58

标签: android

我遇到了问题,我不知道如何解决它。 在我的应用程序打开pdf阅读器之后,我有了这个崩溃日志

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.nicopasso.views.Box)
        at android.os.Parcel.writeSerializable(Parcel.java:1394)
        at android.os.Parcel.writeValue(Parcel.java:1341)
        at android.os.Parcel.writeArrayMapInternal(Parcel.java:644)
        at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1313)
        at android.os.Bundle.writeToParcel(Bundle.java:1034)
        at android.os.Parcel.writeBundle(Parcel.java:669)
        at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:136)
        at android.os.Parcel.writeTypedArray(Parcel.java:1197)
        at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:381)
        at android.os.Parcel.writeParcelable(Parcel.java:1363)
        at android.os.Parcel.writeValue(Parcel.java:1268)
        at android.os.Parcel.writeArrayMapInternal(Parcel.java:644)
        at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1313)
        at android.os.Bundle.writeToParcel(Bundle.java:1034)
        at android.os.Parcel.writeBundle(Parcel.java:669)
        at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:2919)
        at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3296)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
 Caused by: java.io.NotSerializableException: android.widget.LinearLayout
        at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1344)
        at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
        at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:959)
        at 
....
....

问题似乎在于LinearLayout(我的Box类扩展了LinearLayout),它没有实现Serializable接口。

Box类:

 public class Box extends LinearLayout implements BoxInterface, Serializable {
    private transient Context mContext;
    public Box(Integer boxId, Context context) {
        super(context);
        mContext = context;
        init(boxId);
    }

    private void init(Integer boxId) {
        View.inflate(mContext, R.layout.box, this);

        mBoxId = boxId;

   }
   //other stuff...
}

有没有办法解决这个问题? 感谢

1 个答案:

答案 0 :(得分:1)

您的类是否在视图层次结构中保留对LinearLayout或包含LinearLayout的其他视图的引用?

当您的活动进入后台时,操作系统会尝试序列化您活动的成员变量,以便将它们存储在Bundle中,因此当它返回到前台时您可以重新生成它。现状。

但是在某个地方你保留对LinearLayout(或带有LinearLayout的视图)的引用,而这些引用并没有实现Serializable,所以你得到了这个例外。