2017-01-23 3 views
0

Android開発でParcelable、Realm、GSONを1つのプロジェクトで使用することはできますか? POJOを作成するときに、これらのライブラリ/フレームワークのそれぞれに異なるアノテーションがあるため、同時に実装する方法は不思議です。もう1つはRealmとParcelableの両方でデータを保持するため、両方を実装する必要がありますか?Android開発でParcelable、Realm、GSONを使用する

+0

クラス、メソッドなどは、複数の注釈を持つことができます。 – CommonsWare

+0

Parcelableをレルムで実装するとどうなりますか? – vidalbenjoe

+0

どうやって?私はRealmを使用していませんが、Parcelableは実装に多くの制限を設けていないので、Realmが矛盾していれば驚くでしょう。 – CommonsWare

答えて

0

これは、1つのメソッドまたは1つのクラスに対して複数の注釈を使用できるため、問題ありません。 注釈が同じ名前を持っている場合@java.lang.Override

1

GSONは、レルムとquirkinessを持っていたし、次の設定

Gson gson = new GsonBuilder() 
.setExclusionStrategies(new ExclusionStrategy() { 
    @Override 
    public boolean shouldSkipField(FieldAttributes f) { 
     return f.getDeclaringClass().equals(RealmObject.class); 
    } 

    @Override 
    public boolean shouldSkipClass(Class<?> clazz) { 
     return false; 
    } 
}) 
.create(); 

GSONが読みfield reflectionを使用する必要のように、あなたはそれを正確にパッケージ名を与える必要がありますオブジェクトからのデータです。つまり、管理対象のRealmObjectsでは、フィールドはnullの値になります。

これは、GSONではデータを取得するためにアクセサを使用するオプションも用意されていませんが、レルムプロキシはデータをメモリにコピーしないためです。

@Body注釈を付けてRetrofitで送信できるオブジェクトが必要で、apiService.sendObject(realm.copyFromRealm(myObject));を実行する必要がある場合は、管理対象のRealmObjectです。


Parcelableレルムによって管理されているすべてのオブジェクトは限り、あなたはその主キーを持っているようにどこでもすでに持続し、かつ容易に入手されているので、ほとんどの場合RealmObjectのために必要ではありません。

ただし、データの変更可能なコピーを切り離して保存する必要がある場合は、クラスのアンマネージインスタンスを直接使用して保存するオブジェクトを作成することを嫌う場合は、Parcelerライブラリを使用してParcelableクラスを簡単に作成できます。要するに



  • はRealmObjectsはParcelerを使用してParcelableするように容易に永続化されていますが、一般的に、あなただけの活動ではなく、オブジェクト全体の間に主キーを送って、それを必要としません
  • GSONはGSON is kinda dumbなので、まずインメモリコピーを作成する必要があります。


は個人的に、私は私のAPIレスポンスを維持することを好むと私のRealmModelsを分離、それはあなたがより最適なスキーマへのマッピングに依存している場合は簡単です。

関連する問題