【问题标题】:Fragment OnSavedInstanceSate and Realm片段 OnSavedInstanceSate 和领域
【发布时间】: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 字段为空。但这行不通。

Android doc

Similer question

【问题讨论】:

  • 您很可能手动将您的领域列表保存在 onSaveInstanceState() 的某个位置。

标签: java android listview android-fragments realm


【解决方案1】:

正如你所发现的。如果在 Intents 中解析,RealmObjects 并不能很好地工作。 我们在这里描述了一些解决方法:https://realm.io/docs/java/latest/#intents

如果你真的想通过 Intent 解析对象,你可以使用 Parceler 之类的东西。这里有描述:https://realm.io/docs/java/latest/#parceler

【讨论】:

  • 非常感谢您的回复,也感谢您发明了这样的 owsem 数据库。