RetrofitCache让retrofit2+okhttp3+rxjava配置缓存如此简单。通过注解配置,可以针对每一个接口灵活配置缓存策略;同时让每一个接口方便支持数据模拟,可以代码减小侵入性,模拟数据可以从内存,Assets,url轻松获取。
RetrofitCache让retrofit2+okhttp3+rxjava配置缓存如此简单。通过注解配置,可以针对每一个接口灵活配置缓存策略;同时让每一个接口方便支持数据模拟,可以代码减小侵入性,模拟数据可以从内存,Assets,url轻松获取。
English RetrofitCache让retrofit2+okhttp3+rxjava 配置缓存如此简单。通过注解配置,可以针对每一个接口灵活配置缓存策略;同时让每一个接口方便支持数据模拟,可以代码减小侵入性,模拟数据可以从内存,Assets,url轻松获取。
@GET("users")
Observable test();
@Cache(time = 20)
@GET("users")
Observable test();
@Cache(time = 20,timeUnit = TimeUnit.MINUTES)
@GET("users")
Observable test();
@Cache()
@GET("users")
Observable test();
@Cache(forceCacheNoNet = false)
@GET("users")
Observable test();
@Mock(value = "{\"data\":\"mockdata\"}") //模拟内存数据
@GET("users")
Observable test();
@Mock(assets = "mock/mock.json") //从assets获取模拟数据
@GET("users")
Observable test();
@Mock(url = "http://url.com/test") //从新的url请求数据
@GET("users")
Observable test();
缓存只对http Get请求有效;如果要问为什么,可以问问后台开发同学
compile 'ren.yale.android:retrofitcachelib:1.1.1' //retrofit2+okhttp3+rxjava1
compile 'ren.yale.android:retrofitcachelibrx2:1.1.1' //retrofit2+okhttp3+rxjava2
RetrofitCache.getInstance().init(this);
也可以修改默认配置,默认time=0,timeUnit = TimeUnit.SECONDS
RetrofitCache.getInstance().init(this).setDefaultTimeUnit(TimeUnit.MINUTES).setDefaultTime(1);
okhttp3.OkHttpClient.Builder clientBuilder=new okhttp3.OkHttpClient.Builder();
...
int cacheSize = 200 * 1024 * 1024;
File cacheDirectory = new File(mContext.getCacheDir(), "httpcache");
Cache cache = new Cache(cacheDirectory, cacheSize);
OkHttpClient client = clientBuilder.cache(cache).build();
...
okhttp3.OkHttpClient.Builder clientBuilder=new okhttp3.OkHttpClient.Builder();
...
//clientBuilder.addInterceptor(new MockInterceptor()); //如果只用Mock模拟功能,只需添加这个拦截器
clientBuilder.addInterceptor(new CacheForceInterceptorNoNet());
clientBuilder.addNetworkInterceptor(new CacheInterceptorOnNet());
...
添加CacheForceInterceptorNoNet作用是在无网时强制走缓存,如果只添加了CacheInterceptorOnNet,那么在有网和无网的缓存策略就会一样
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.client(getOkHttpClient())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
RetrofitCache.getInatance().addRetrofit(retrofit);
api.test().compose(CacheTransformer.emptyTransformer())...
RetrofitCache.getInstance().setCacheInterceptorListener(
new CacheInterceptorListener() {
@Override
public boolean canCache(Request request,Response response) {
String res = "";
try {
res = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
});
RetrofitCache.getInstance().enableMock(false);
RetrofitCache.getInstance().addIgnoreParam("access_token");
…
…
…
No open issues yet, or sync has not completed.