从 Realm 中检索一个 RealmObject 后将其设置为另一个 RealmObject
Setting a RealmObject to another RealmObject after retrieving it from Realm
我在使用 Realm 时遇到问题,每次我尝试在存储 RealmObject 后将其设置为另一个时,Realm 都会崩溃并出现 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 对象并像这样操作它们似乎有很多不必要的工作。
我只想知道我是否遗漏了什么。或者,如果有更简单的方法可以做到这一点。任何帮助将不胜感激。
谢谢
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 是为了更好的异常消息而创建的。
我在使用 Realm 时遇到问题,每次我尝试在存储 RealmObject 后将其设置为另一个时,Realm 都会崩溃并出现 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 对象并像这样操作它们似乎有很多不必要的工作。
我只想知道我是否遗漏了什么。或者,如果有更简单的方法可以做到这一点。任何帮助将不胜感激。
谢谢
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 是为了更好的异常消息而创建的。