现在有一个需求,不管网络是否可用,先加载本地缓存,如果网络可用,同时请求网络数据,成功返回的话就展示最新数据。这样提高了用户体验,不至于网络差的情况页面一片空白。但是retrofit这个框架好像不能实现,它是通过添加拦截器实现自定义缓存,一次请求,要么返回缓存数据,要么返回网络数据,不能同时返回两者
/**
* 缓存策略
*/
private static final Interceptor cacheControlInterceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (!NetWorkUtils.isNetworkAvailable(GApp.getInstance())) {
request = request.newBuilder().cacheControl(CacheControl.FORCE_CACHE).build();
Log.i("ww", "no network");
}
Response response = chain.proceed(request);
if (NetWorkUtils.isNetworkAvailable(GApp.getInstance())) {
// String cacheControl = request.cacheControl().toString();
return response.newBuilder()
.header("Cache-Control", CACHE_CONTROL_NETWORK)
.removeHeader("Pragma")
.build();
} else {
return response.newBuilder()
.header("Cache-Control", "public, " + CACHE_CONTROL_CACHE)
.removeHeader("Pragma")
.build();
}
}
};
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。