从Realm /从托管RealmObject转换RealmObject到非托管对象

时间:2015-08-27 17:40:11

标签: android realm

我想"分离"来自RealmObject的{​​{1}},意味着我希望能够从方法中返回Realm,并且能够在RealmObject close之后使用它实例。

这样的事情:

Realm

目前public Person getPersonWithId(final Context context, final String personId){ Realm realm = Realm.getInstance(context); Person person = realm.where.....; realm.close(); return person; } 将按预期返回错误。

拥有托管对象也意味着该对象是不可变的(无法修改),因此任何更新像getPersonWithId(mContext, personId).getName()之类的对象的方法都会因对象是托管对象而失败。

我希望会有像person.setName(String name)

这样的方法

是否有人知道此问题的解决方案/解决方法?

2 个答案:

答案 0 :(得分:28)

Android领域现在支持附加和分离领域对象。所以你可以这样做:

RealmObject objectCopy = realm.copyFromRealm(RealmObject object);

以下是文档中的详细信息:

  

Realm对象的实例可以是托管的也可以是非托管的。

     

托管对象在Realm中保留,始终是最新的   线程受限。它们通常比它更轻盈   非托管版本,因为它们在Java堆上占用的空间更少。

     

非托管对象就像普通的Java对象一样,但它们不是   持久化,不会自动更新。他们可以   在线程之间自由移动。

     

可以使用两种状态之间的转换   Realm.copyToRealm()和Realm.copyFromRealm()

答案 1 :(得分:3)

here有一项功能请求。对此没有真正好的解决方案,只有解决方法。

解决方法是手动将数据从一个对象复制到另一个对象。我的RealmObjects有很多字段,所以手动将属性从一个对象复制到另一个对象是不行的。

而不是手动编写"复制代码"我决定使用MapStruct。这是sandbox项目,其中领域 MapStruct 。它似乎工作得很好,至少对于简单的模型。