You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Realm用findFirst()取数据放Bundle跳转页面报序列化IO异常如何解决?

异常引发原因
  • Realm通过findFirst()返回的实例是动态生成的RealmProxy代理类对象,并非你定义的原始实体类实例。该代理类未实现Serializable接口,强制转型后执行序列化操作就会触发IO异常。
  • Realm代理对象默认绑定当前线程的Realm会话,内部持有数据库连接引用,设计上本身就不支持跨组件、跨线程的序列化传输。
修复方案
  • 方案1:获取脱管对象后序列化
    调用copyFromRealm()方法将代理对象转为脱离Realm管控的普通实体类实例,只要你的自定义实体类实现了Serializable接口,就可以正常存入Bundle:
    // 先查询再拷贝得到脱管对象
    StationAndLocationModel item = realm.copyFromRealm(realm.where(StationAndLocationModel.class).findFirst());
    // 再存入Bundle
    mBundle.putSerializable("data", item);
    
  • 方案2:改用Parcelable实现序列化
    给自定义Realm实体类实现Parcelable接口,Android原生Bundle传输优先推荐Parcelable,性能比Serializable高3~10倍,同样需要先通过copyFromRealm()拿到脱管对象后再存入Bundle。
  • 方案3:仅传递主键重新查询
    如果对象字段较多、数据量大,可以只把该数据的唯一主键存入Bundle,跳转至目标Activity后再用主键重新查询Realm获取对应实例,不需要做序列化操作,更符合Realm的设计使用规范。

内容的提问来源于stack exchange,提问作者DGAD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:45:03