我想要实现的目标是通过Realm进行通用响应缓存。 API客户端使用Retrofit。在改造回调中,我想在Realm中缓存传入的响应。回调是通用的,我想将它应用于许多Retrofit调用。 Callback类与此
类似public class CachedApiCallback
<E extends RealmObject, T extends List<E>>
implements Callback<T> { ... }
传递的类型参数保证E将扩展RealmObject。我想做这样的事情:
public void onSuccessfulResponse(Call<T> call, Response<T> response, int statusCode) {
/// some caching logic
RealmResults<E> cachedData = realm.where( ???? );
}
这就是问题,我不能使用标准的Realm方法。有没有办法使用通用的RealmObject类检索数据?
答案 0 :(得分: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();
// ....
}
}
可能有一个更清洁的解决方案,但这可以完成工作。