将独立对象添加到RealmList

8

能否将独立对象添加到已保存在realm中的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());
}

`

1个回答

8

来自 Realm 的 Christian。目前不可能实现您所说的功能。但这是一个有趣的用例。 我们设计 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);
}

你的解决方案也在我的脑海中出现过。我只是想澄清一下,除了通过一系列调用来传递Realm对象之外,是否还有其他选项。但是,算了 :)我真的需要两次开始事务吗?一次在UpdateHelper.update()方法外,再一次在内部? - degill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接