Java 将独立对象添加到RealmList
是否可以将独立对象添加到域中已持久化的RealmObject的RealmList中 嗯,我知道它不起作用,因为我在(Java 将独立对象添加到RealmList,java,android,realm,Java,Android,Realm,是否可以将独立对象添加到域中已持久化的RealmObject的RealmList中 嗯,我知道它不起作用,因为我在(object.row.getIndex():RealmList:94)上得到NPE 我想做的是: mRealm.beginTransaction; contact.getEmails().add(new Email()); mRealm.commitTransaction; 因为在那个特定的时刻,我无法访问某个领域(我可以让它工作,但我必须重写一些结构),例如: //In Act
object.row.getIndex():RealmList:94
)上得到NPE
我想做的是:
mRealm.beginTransaction;
contact.getEmails().add(new Email());
mRealm.commitTransaction;
因为在那个特定的时刻,我无法访问某个领域(我可以让它工作,但我必须重写一些结构),例如:
//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.copyToRealm()
方法,是为了明确说明您不应该再使用旧对象。允许将独立对象添加到已持久化的列表中会降低透明度。您还需要它发生在写事务内部。在方法调用中添加对领域的引用可能是解决此问题的最佳方法
//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);
}
我也想到了你的解决办法。我只是想澄清,除了通过级联调用一路引导领域对象之外,是否还有其他选择。但是哦,好吧:)我真的需要开始两次交易吗?在
UpdateHelper.update()之外,还是在内部?