2015-10-15 15 views
5

ho bisogno di convertire uno dei miei oggetti del modello (che è stato automaticamente riempito da JSON utilizzando Retrofit) a un oggetto Reame.Come creare una nuova RealmObject che contiene un realmlist

Inizialmente, il mio codice era new RealmPoll() anziché realm.createObject(RealmPoll.class). (Mi è stato sempre NullPointerException proprio come this question) Così ho risolto tale questione. Ma non riesco a trovare un modo per copiare una RealmList.

non riesco a trovare alcun esempio di creazione di RealmObjects con RealmLists nel official Realm website tutorial e la docs dire

Solo Reame può creare RealmLists gestiti. RealmLists gestite verranno aggiorna automaticamente i contenuti ogniqualvolta il Regno sottostante viene aggiornato, e possono essere accessibili solo utilizzando il getter di un RealmObject.

che mi fa credere che in qualche modo non sia possibile? Ma è un compito davvero semplice. Non so come interpretare il significato dei documenti.

Esiste un modo per convertire semplicemente un oggetto (come RetrofitPoll in basso) in un oggetto realm (come ad esempio RealmPoll in basso) se contiene un elenco?

Una funzione che illustra la mia domanda:

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; 
} 

risposta

6

Dovrebbe essere possibile effettuare le seguenti operazioni

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

Se si utilizza Retrofit per creare l'intero oggetto-grafico, si dovrebbe essere in grado di copiare tutto in Regno utilizzando un solo un one-liner. In caso contrario, è un bug.

Nota questo è anche nella documentazione:

* 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. 

liste non gestiti sono creati da solo facendo new RealmList() ma questo potrebbe probabilmente essere più chiaro nella documentazione.

Problemi correlati