我遇到了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对象并像这样操纵它们似乎是很多不必要的工作。
我只是想知道我是否遗漏了什么。或者,如果有更简单的方法来做到这一点。任何帮助将不胜感激。
由于
答案 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是为更好的异常消息而创建的。