2015-10-15 6 views
5

Мне нужно преобразовать один из объектов моей модели (который был автоматически заполнен с помощью Json с помощью Retrofit) в объект Realm.Как создать новый объект RealmObject, содержащий RealmList

Сначала мой код был new RealmPoll() вместо realm.createObject(RealmPoll.class). (Я получал NullPointerException точно так же, как this question) Так что я решил эту проблему. Но я не могу найти способ скопировать RealmList.

Я не могу найти примеры создания RealmObjects с RealmLists в official Realm website tutorial и docs говорят

Только Realm может создать управляемые RealmLists. Управляемые RealmLists будут автоматически обновлять содержимое всякий раз, когда базовое Realm обновляется и может быть доступно только с помощью получателя RealmObject.

, который заставляет меня поверить, что это как-то невозможно? Но это действительно простая задача. Я не знаю, как интерпретировать смысл документов.

Можно ли каким-либо способом просто преобразовать объект (например, RetrofitPoll ниже) в объект realm (например, RealmPoll ниже), если он содержит список?

Одна функция, которая иллюстрирует мой вопрос:

private RealmPoll convertRetrofitPollToRealmPoll(Realm realm, RetrofitPoll retrofitPoll) 
{ 
    RealmPoll realmPoll = realm.createObject(RealmPoll.class); //<----- fixed, used to be "new RealmPoll()". 

    //Convert List<Answer> 
    RealmList<RealmAnswer> realmAnswers = new RealmList<RealmAnswer>(); //<----- How to do same thing here? 
    for(RetrofitAnswer retrofitAnswer : retrofitPoll.getAnswers()) 
    { 
     realmAnswers.add(convertRetrofitAnswerToRealmAnswer(retrofitAnswer)); 
    } 
    realmPoll.setAnswers(realmAnswers); 
} 

RetrofitPoll.java

public class RetrofitPoll 
{ 
    private List<Answer> answers; 
    private String id; 
    private Date startDate; 
    private String title; 
    private Topic topic; 
} 

RealmPoll.java

public class Poll extends RealmObject 
{ 
    private RealmList<Answer> answers; 
    private String id; 
    private Date startDate; 
    private String title; 
    private Topic topic; 
} 

ответ

6

Должна быть возможность сделать следующее

ObjectWithList obj = new ObjectWithList(); 
RealmList<Foo> list = new RealmList(); 
list.add(new Foo()); 
obj.setList(list); 

realm.beginTransaction(); 
realm.copyToRealm(obj); // This will do a deep copy of everything 
realm.commitTransaction(); 

Если вы используете Дооснащение создать весь объект-граф, вы должны быть в состоянии скопировать все в Realm, используя только один на один лайнер. Если нет, это ошибка.

Примечание это также в документации:

* Non-managed RealmLists can be created by the user and can contain both managed and non-managed 
* RealmObjects. This is useful when dealing with JSON deserializers like GSON or other 
* frameworks that inject values into a class. Non-managed elements in this list can be added to a 
* Realm using the {@link Realm#copyToRealm(Iterable)} method. 

неуправляемых списки создаются просто делать new RealmList(), но это, вероятно, может быть яснее в документации.

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