okhttp3缓存实践

  • 离线时使用cache,在线时访问网络并更新cache
  • OkHttpClient设置cache后,response自动进行缓存;通过拦截器,离线时request添加头信息header(“Cache-Control”, “only-if-cached”)强制使用缓存
  • 这些方法不支持cache:public static boolean invalidatesCache(String method) {
    return method.equals(“POST”) || method.equals(“PATCH”) || method.equals(“PUT”) || method.equals(“DELETE”) || method.equals(“MOVE”);
    }
  • 如果不想使用okhttp的cache机制,也可以自己通过对象序列化等方式自己保存reponse结果
//离线缓存,在线获取最新数据
        File httpCacheDir = new File(getActivity().getExternalCacheDir(), "response");
        Cache cache = new Cache(httpCacheDir, 10 * 1024 * 1024);
        OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(new Interceptor() {
                    @Override
                    public Response intercept(Chain chain) throws IOException {
                        Request request = chain.request();
                        if(!isNetWorkAvailable()){
                            request = request.newBuilder()
                                    .cacheControl(CacheControl.FORCE_CACHE)
                                    .build();
                        }
                        return chain.proceed(request);
                        //无效,需结合addNetworkInterceptor使用
                        /*Response response = chain.proceed(request);
                        if(isNetWorkAvailable()){
                            return response.newBuilder()
                                    .header("Cache-Control", "public, max-age=" + 0) //有网络时设置缓存超时时间0个小时
                                    .removeHeader("Pragma") //清除头信息,因为服务器如果不支持,会返回一些干扰信息,不清除下面无法生效
                                    .build();
                        }else {
                            return response.newBuilder()
                                    .header("Cache-Control", "public, only-if-cached, max-stale=" +  Integer.MAX_VALUE)
                                    .removeHeader("Pragma")
                                    .build();
                        }*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值