开发者社区> 问答> 正文

retrofit框架怎么实现一次请求先返回缓存数据,在返回网络数据?

现在有一个需求,不管网络是否可用,先加载本地缓存,如果网络可用,同时请求网络数据,成功返回的话就展示最新数据。这样提高了用户体验,不至于网络差的情况页面一片空白。但是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();
        }
    }
};

展开
收起
wuvae 2018-06-19 14:46:08 2902 0
2 条回答
写回答
取消 提交回答
  • 首先你说的想直接返回两个是不可能的,可以自己改源码呗

    2019-07-17 22:45:28
    赞同 展开评论 打赏
  • 哈哈哈还好还好

    换框架吧

    2019-07-17 22:45:28
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
基于英特尔 SSD 的虚拟机缓存解决SSD 立即下载
用户态高速块缓存方案 立即下载
高性能Web架构之缓存体系 立即下载