Realm中copyToRealm()的用例示例

时间:2016-08-01 12:06:56

标签: realm

有人可以提供一个简单的用例示例为什么有人会使用:c="2"代替copyToRealm()

我不清楚为什么 ,如果有createObject(),任何人都会使用copyToRealm()

在这里的示例中,它们看起来几乎相同https://realm.io/docs/java/latest/

createObject()获取非托管对象并将其连接到Realm,而copyToRealm()直接在Realm中创建对象。

2 个答案:

答案 0 :(得分:6)

例如,将GSON生成的对象 - 从Rest API返回到Realm中时,它非常有用。

答案 1 :(得分:2)

realm.createObject()也返回一个RealmProxy实例并直接操作,因此会创建N个对象来存储N个对象,但是您可以使用以下模式仅使用1存储N个对象的对象实例:

    RealmUtils.executeInTransaction(realm -> {
        Cat defaultCat = new Cat(); // unmanaged realm object

        for(CatBO catBO : catsBO.getCats()) {
            defaultCat.setId(catBO.getId());
            defaultCat.setSourceUrl(catBO.getSourceUrl());
            defaultCat.setUrl(catBO.getUrl());
            realm.insertOrUpdate(defaultCat);
        }
    });

但是要真正回答你的问题,copyToRealmOrUpdate()是有意义的,如果你想要持久化元素,将它们放在RealmList<T>中并在另一个RealmObject中设置新管理对象的RealmList。它主要发生在您的RealmObject类和下载的解析对象匹配时。

@JsonObject
public class Cat extends RealmObject {
    @PrimaryKey
    @JsonField(name="id")
    String id;

    @JsonField(name="source_url")
    String sourceUrl;

    @JsonField(name="url")
    String url;

    // getters, setters;
}

final List<Cat> cats = //get from LoganSquare;
realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        Person person = realm.where(Person.class).equalTo("id", id).findFirst();
        RealmList<Cat> realmCats = new RealmList<>();
        for(Cat cat : realm.copyToRealmOrUpdate(cats)) {
             realmCats.add(cat);
        }
        person.setCats(realmCats);
    }
});