2015-10-15 14 views
5

私のモデルオブジェクト(Retrofitを使用してJsonから自動的に埋め込まれたモデルオブジェクト)の1つをRealmオブジェクトに変換する必要があります。RealmListを含む新しいRealmObjectを作成する方法

最初は、私のコードはrealm.createObject(RealmPoll.class)の代わりにnew RealmPoll()でした。 (私はthis questionのようにNullPointerExceptionを得ていたので)私はその問題を解決しました。しかし、私はRealmListをコピーする方法を見つけることができません。

私はどのofficial Realm website tutorialにRealmListsとRealmObjectsの作成例とdocs

を言うだけレルムの管理RealmListsを作成することができます見つけることができません。 Managed RealmListsは、基礎となるレルムが であるときは常に のコンテンツを自動的に更新し、RealmObjectのゲッターを使用してのみアクセスできます。

私はそれがどういうわけかできないと信じさせますか?しかし、それは本当に簡単な作業です。私はどのようにドキュメントの意味を解釈するのか分からない。

リストが含まれているオブジェクト(以下の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(); 

次の操作を行うことが可能であるべきである、あなただけの1ワンライナーを使用してレルムにすべてをコピーすることができるはずです。そうでなければ、それはバグです。

注これはドキュメントでもある:

* 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()を行うことによって作成されますが、これはおそらく、ドキュメントに明確である可能性があります。

関連する問題