有人可以提供一个简单的用例示例为什么有人会使用:c="2"
代替copyToRealm()
?
我不清楚为什么和 ,如果有createObject()
,任何人都会使用copyToRealm()
。
在这里的示例中,它们看起来几乎相同https://realm.io/docs/java/latest/。
createObject()
获取非托管对象并将其连接到Realm,而copyToRealm()
直接在Realm中创建对象。
答案 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);
}
});