缓存拦截器的使用

在 MyCacheinterceptor 中主要做了(post方式无法缓存)
①设置缓存位置
②无网时:设置缓存协议
③有网:加载网络数据;无网:加载缓存数据

代码:


 OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(myCacheinterceptor)//应用拦截器
                .addNetworkInterceptor(myCacheinterceptor)//网络拦截器
                .connectTimeout(5, TimeUnit.SECONDS)
                .cache(new Cache(new File(getCacheDir(), "Cache"), 1024 * 1024 * 10))
                .build();

 class MyCacheinterceptor implements Interceptor {
        @Override
        public Response intercept(Chain chain) throws IOException {
             //1.获取请求数据
            Request request = chain.request();
             //2.判断如果无网时,设置缓存协议
            if (!isNetworkAvailable(MainActivity.this)) {
                request = request.newBuilder().cacheControl(CacheControl.FORCE_CACHE).build();

            }
            //3.开始请求网络,获取响应数据
            Response originalResponse = chain.proceed(request);
            //4.判断是否有网
            if (isNetworkAvailable(MainActivity.this)) {//有网,获取网络数据
                int maxAge = 0;
                return originalResponse.newBuilder()
                        .removeHeader("Pragma")
                        .header("Cache-Control", "public ,max-age=" + maxAge)
                        .build();
            } else {
                //没有网络,获取缓存数据
                int maxStale = 15*60;
                return originalResponse.newBuilder()
                        .removeHeader("Pragma")
                        .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
                        .build();
            }

        }
    }

    /**
        检测是否有网
     */
    public static boolean isNetworkAvailable(Context context) {
        if (context != null) {
            ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo info = cm.getActiveNetworkInfo();
            if (info != null) {
                return info.isAvailable();
            }
        }
        return false;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值