2015-12-01 1 views
0

Я пытаюсь пойти глубже в Царство, я использую его последние несколько дней в нашем проекте и не могу понять какое-то странное поведение, как для меня, в документации я не нахожу полезной информации, я смотрел в их образцы приложений, но все еще недостаточно информации, так что может кто-нибудь объяснить мне. Почему модель, возвращаемая Realm, пуста, в браузере отображаются правильные данные, но не в режиме отладки. realm debugКак понять поведение Realm на Android?

По образцу "интро пример", вот фрагмент кода:

private void basicCRUD(Realm realm) { 
    showStatus("Perform basic Create/Read/Update/Delete (CRUD) operations..."); 

    // All writes must be wrapped in a transaction to facilitate safe multi threading 
    realm.beginTransaction(); 

    // Add a person 
    Person person = realm.createObject(Person.class); 
    person.setId(1); 
    person.setName("Young Person"); 
    person.setAge(14); 

    // When the transaction is committed, all changes a synced to disk. 
    realm.commitTransaction(); 

    // Find the first person (no query conditions) and read a field 
    person = realm.where(Person.class).findFirst(); 
    showStatus(person.getName() + ":" + person.getAge()); 

    // Update person in a transaction 
    realm.beginTransaction(); 
    person.setName("Senior Person"); 
    person.setAge(99); 
    showStatus(person.getName() + " got older: " + person.getAge()); 
    realm.commitTransaction(); 

    // Delete all persons 
    realm.beginTransaction(); 
    realm.allObjects(Person.class).clear(); 
    realm.commitTransaction(); 
} 

Я провел весь день. Моя главная проблема следующая, у меня есть один вид деятельности А внутри одного фрагмента с адаптером (позволяет говорить, что у него есть модель кролика и отображает его 4 моркови), после щелчка «+» на фрагменте я заменяю новым фрагментом, где я создаю 3 моркови , то после popBackStack() я не буду добавлять это 3 моркови к предыдущему 4.

Как это сделать: активность (имеет экземпляр Кролика, который имеет 4 моркови, сохраненным в Realm) ->Фрагмент A (4 моркови) ->Фрагмент B (получить экземпляр из Realm, морковь в пустой, почему я не буду добавлять 3 морковь и сохранить Realm мой кролик?) ->popBackStack ->OnCreateView Framgent A (получите Rabbit from Realm, адаптер попытается отобразить данные, но морковь пуста. Иди домой).

+0

Вы должны использовать 'executeTransaction()' вместо 'начать/CommitTransaction()'. – EpicPandaForce

ответ

4

Realm - это база данных с нулевой копией. Это означает, что в отличие от ORM, которые копируют все свои данные в кучу Java, прежде чем вы сможете получить к ней доступ, мы сохраняем все наши данные в собственной памяти. Вы можете думать о RealmObjects как объектах курсора, защищенных типом. Это также означает, что отладчик IntelliJ не будет показывать правильные значения, так как он показывает значения в куче Java. Мы используем классы прокси, чтобы переопределить поведение ваших геттеров и сеттеров (в вашем скриншоте: PersonRealmProxy), поэтому использование методов getX() вернет правильные значения.

Что касается второго вопроса, то было бы проще создать проблему на GitHub, чтобы мы могли попросить больше деталей: https://github.com/realm/realm-java/issues

Смежные вопросы