2015-10-15 93 views
5

我需要將我的一個模型對象(從Json使用Retrofit自動填充)轉換爲Realm對象。如何創建一個Realmist的新RealmObject

起初,我的代碼是new RealmPoll()而不是realm.createObject(RealmPoll.class)。 (我得到NullPointerException就像this question)所以我解決了這個問題。但我無法找到複製RealmList的方法。

我找不到在official Realm website tutorial創建與RealmLists RealmObjects的任何示例和docs

只有境界可以創建管理RealmLists。 Managed RealmLists將在 更新時自動更新內容,並且只能使用RealmObject的getter訪問。

這讓我相信這是不可能的?但這是一個非常簡單的任務。我不知道如何解釋文檔的含義。

如果它包含一個列表,是否有任何方法可以將一個對象(如下面的RetrofitPoll)轉換爲一個領域對象(如下面的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(); 

如果使用改造創建整個對象的圖形,你應該能夠只用一個一個班輪一切複製到境界。如果沒有,這是一個錯誤。

注意這也是文檔:

* 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()創建但這很可能在文檔更清晰。