将独立对象添加到 RealmList
Adding standalone-objects to a RealmList
是否可以将独立对象添加到领域中已持久存在的 RealmObject 的 RealmList 中?
好吧,我知道它不起作用,因为我在 (object.row.getIndex():RealmList:94
)
得到了 NPE
我想做的是:
mRealm.beginTransaction;
contact.getEmails().add(new Email());
mRealm.commitTransaction;
因为在那个特定时刻我无法访问 Realm(我可以让它工作,但我必须重写一些结构),例如:
//In Activity
Contact contact = Realm.where(Contact.class).equalsTo("name","pete").findAll().first();
mRealm.beginTransaction;
UpdateHelper.update(contact);
mRealm.commitTransaction;
//Helper class some else package
public static void update(Contact contact) {
//do update stuff
contact.getEmails().add(new Email());
}
`
这里是 Realm 的基督徒。
不,目前这是不可能的。这是一个有趣的用例。
我们有一个 Realm.copyToRealm()
方法的原因是要明确表示你不应该再使用你的旧对象。允许将独立对象添加到已经持久化的列表中会降低透明度。您还需要它发生在写入事务中。在您的方法调用中添加对 Realm 的引用可能是解决它的最佳方法。
//In Activity
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Contact contact = realm.where(Contact.class)
.equalTo("name","pete")
.findFirst();
if(contact != null) {
UpdateHelper.update(contact, realm);
}
}
});
//helper method
public static void update(Contact contact, Realm realm) {
//do update stuff
Email email = realm.copyToRealm(new Email());
contact.getEmails().add(email);
}
是否可以将独立对象添加到领域中已持久存在的 RealmObject 的 RealmList 中?
好吧,我知道它不起作用,因为我在 (object.row.getIndex():RealmList:94
)
我想做的是:
mRealm.beginTransaction;
contact.getEmails().add(new Email());
mRealm.commitTransaction;
因为在那个特定时刻我无法访问 Realm(我可以让它工作,但我必须重写一些结构),例如:
//In Activity
Contact contact = Realm.where(Contact.class).equalsTo("name","pete").findAll().first();
mRealm.beginTransaction;
UpdateHelper.update(contact);
mRealm.commitTransaction;
//Helper class some else package
public static void update(Contact contact) {
//do update stuff
contact.getEmails().add(new Email());
}
`
这里是 Realm 的基督徒。
不,目前这是不可能的。这是一个有趣的用例。
我们有一个 Realm.copyToRealm()
方法的原因是要明确表示你不应该再使用你的旧对象。允许将独立对象添加到已经持久化的列表中会降低透明度。您还需要它发生在写入事务中。在您的方法调用中添加对 Realm 的引用可能是解决它的最佳方法。
//In Activity
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Contact contact = realm.where(Contact.class)
.equalTo("name","pete")
.findFirst();
if(contact != null) {
UpdateHelper.update(contact, realm);
}
}
});
//helper method
public static void update(Contact contact, Realm realm) {
//do update stuff
Email email = realm.copyToRealm(new Email());
contact.getEmails().add(email);
}