Задаване на RealmObject на друг RealmObject след извличането му от Realm

Имам проблем с Realm, който го кара да се срива с NullPointerException всеки път, когато се опитам да задам RealmObject на друг, след като е бил съхранен.

Eg.

    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();

Това е добре за прости структури от данни. Но аз използвам Realm обекти, които съдържат два или три други RealmObjects и манипулирането им по този начин изглежда като много ненужна работа.

Просто искам да знам дали пропускам нещо. Или ако има по-лесен начин да направите това. Всяка помощ ще бъде високо оценена.

Благодаря


person SeanSWatkins    schedule 08.10.2015    source източник


Отговори (1)


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 е създаден за по-добро съобщение за изключение.

person beeender    schedule 09.10.2015
comment
Перфектно! Благодаря ти. Дори не се сетих за това. Вашата помощ е високо оценена. - person SeanSWatkins; 09.10.2015