从Realm中检索RealmObject后,将其设置为另一个RealmObject

时间:2015-10-08 08:39:05

标签: java android realm updating

我遇到了Realm的问题,每次我尝试在存储后将RealmObject设置为另一个时,它会导致NullPointerException崩溃。

例如

    Person person = new Person();
    person.setName("Martha");
    Realm realm = Realm.getInstance(this);
    realm.beginTransaction();
    realm.copyToRealm(person);
    realm.commitTransaction();

    Person personFromRealm = realm.where(Person.class).findFirst();

    realm.beginTransaction();
    Pet pet = new Pet();
    pet.setType("dog");
    personFromRealm.setPet(pet); <--- This line will crash
    realm.commitTransaction();

我不确定我还能做些什么来防止这种情况发生。 我需要这样做的原因是需要在一个地方创建Person对象,我想在另一个地方添加动物。

我发现这有效:

    Realm realm = Realm.getInstance(this);
    Person personFromRealm = realm.where(Person.class).findFirst();

    realm.beginTransaction();
    Pet pet = personFromRealm.getPet();
    pet.setType("dog");
    realm.commitTransaction();

这适用于简单的数据结构。但我正在使用包含两个或三个其他RealmObjects的Realm对象并像这样操纵它们似乎是很多不必要的工作。

我只是想知道我是否遗漏了什么。或者,如果有更简单的方法来做到这一点。任何帮助将不胜感激。

由于

1 个答案:

答案 0 :(得分:2)

Pet = new Pet()将创建一个不受Realm管理的独立对象。这是personFromRealm.setPet(pet)崩溃的原因。但是,此处的错误消息根本不是用户友好的......

尝试:

Pet pet = new Pet();
pet.setType("dog");
pet = realm.copyToRealm(pet);
personFromRealm.setPet(pet);

或更简单:

Pet pet = realm.createObject(Pet.class);
pet.setType("dog");
personFromRealm.setPet(pet);

他们都需要参与交易。

https://github.com/realm/realm-java/issues/1558是为更好的异常消息而创建的。