开发者社区 问答 正文

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

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

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

展开
收起
爱吃鱼的程序员 2020-06-02 14:08:16 391 分享
分享
版权
举报
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    要么修改retrofit源码,要么自己去实现本地缓存

    2020-06-02 14:08:36 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
问答分类:
问答地址:
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等