2017-05-18 9 views
1

達成したい目標は、レルムを介した一般的なレスポンスキャッシュです。 APIクライアントはRetrofitを使用します。レトロフィットのコールバックでは、受信したレスポンスをレルムにキャッシュします。コールバックは一般的なもので、多くのRetrofitコールに適用したいと考えています。コールバッククラスはこれと似ています汎用レルムオブジェクトをレルムから取得

渡された型パラメータは、EがRealmObjectを拡張することを保証します。私はこのようなことをしたい:

public void onSuccessfulResponse(Call<T> call, Response<T> response, int statusCode) { 
    /// some caching logic 
    RealmResults<E> cachedData = realm.where(????); 
} 

ここに問題がある、私は標準的なレルムのアプローチを使用することはできません。汎用RealmObjectクラスを使用してデータを取得する方法はありますか?

+0

これをもっと明確にすることはできますか?私はあなたが何を求めているのか分かりません – Michael

+1

@Michaelよ、一瞬、編集するつもりです。 – Necroqubus

答えて

3

これまでに正常に動作していた解決策を見つけました。 コンストラクタに型の値を渡してコールバックインスタンスに格納しました。

public class CachedApiCallback<E extends RealmObject, T extends List<E>> implements Callback<T> { 

    protected boolean paging; 
    protected IListenable<List<E>> listener; 
    protected Class<E> entityType; 

    public CachedApiCallback(Class<E> entityType){ 
     this.entityType = entityType; 
    } 

    public void onSuccessfulResponse(Call<T> call, Response<T> response, int statusCode) { 
     // .... 
     RealmResults<E> cachedData = realm.where(entityType).findAll(); 
     // .... 
    } 
} 

おそらく清潔な解決策がありますが、これは完了です。

+1

いいえ、クラスを明示的に渡すことは、型の削除のために避けられません。 – EpicPandaForce

関連する問題