【发布时间】:2026-02-03 15:45:01
【问题描述】:
我正在使用 Realm 作为我的 android 应用程序的数据库,我得到了一个片段,它有一个 RealmList 对象,假设是“X”类型。而且这个片段还包含一个视图寻呼机。每个子片段都包含一个 ListView。主片段为每个子片段从 RealmList 发送一个 X 对象。
X 类包含一个包含“Z”类型对象的 RealmList。每个子片段中的 ListView 组件在每一行中显示“Z”类信息。 当我在运行时进入主要片段时,一切正常。但是如果我按下设备的主页按钮暂时退出应用程序,应用程序会因抛出以下异常而崩溃。
java.lang.RuntimeException: Parcelable encountered IOException writing
serializable object (name = io.realm.XRealmProxy)
at android.os.Parcel.writeSerializable(Parcel.java:1323)
at android.os.Parcel.writeValue(Parcel.java:1271)
............
Caused by: java.io.NotSerializableException: io.realm.XRealmProxy$XColumnInfo
at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1366)
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1673)
在谷歌上搜索了 3 个小时后。我知道每个 RealmObject 在后台维护一个代理类,它不是一个可序列化的对象。所以我可以理解片段正试图达到保存的实例状态,由于不可序列化它会抛出它。 正如 android 文档所说,当一个活动或片段进入 onSavedInstance 状态时,它只保留有关其视图的信息。
我的问题是,为什么它试图保留 RealmList。
以及解决此问题的任何解决方案。 我试图覆盖 OnSavedInstance 方法并使 RealmList 字段为空。但这行不通。
【问题讨论】:
-
您很可能手动将您的领域列表保存在
onSaveInstanceState()的某个位置。
标签: java android listview android-fragments realm