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

Tud*_*uca 13 android realm

我想RealmObject从它"分离"一个Realm,这意味着我希望能够RealmObject从一个方法返回一个并且能够在我closeRealm实例之后使用它.

像这样的东西:

public Person getPersonWithId(final Context context, final String personId){
    Realm realm = Realm.getInstance(context);
    Person person = realm.where.....;
    realm.close();
    return person;
}
Run Code Online (Sandbox Code Playgroud)

目前getPersonWithId(mContext, personId).getName()将按预期返回错误.

拥有一个托管对象也意味着该对象是不可变的(无法修改),因此任何更新对象的方法person.setName(String name)都会因为该对象是一个托管对象而失败.

我希望会有像这样的方法 Person person = person.detachFromRealm();

有谁知道这个问题的解决方案/解决方法?

Sem*_*yon 28

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

RealmObject objectCopy = realm.copyFromRealm(RealmObject object);
Run Code Online (Sandbox Code Playgroud)

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

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

托管对象在Realm中持久存在,始终是最新的并且线程受限.它们通常比非托管版本更轻量级,因为它们在Java堆上占用的空间更少.

非托管对象就像普通的Java对象一样,它们不会被持久化,也不会自动更新.它们可以跨线程自由移动.

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