OkHttp缓存

[参考文档]{http://mushuichuan.com/2016/03/01/okhttpcache/}

###okhttp缓存

  • 服务器支持本地缓存

    如果服务器支持缓存,请求返回的Response会带有这样的Header:Cache-Control, max-age=xxx,这种情况下我们只需要手动给okhttp设置缓存就可以让okhttp自动帮你缓存了。这里的max-age的值代表了缓存在你本地存放的时间,可以根据实际需要来设置其大小。

首先我们要提供了一个文件路径用来存放缓存,出于安全性的考虑,在Android中我们推荐使用Context.getCacheDir()来作为缓存的存放路径,另外还需要指定缓存的大小就可以创建一个缓存了。如下所示:

 OkHttpClient okHttpClient = new OkHttpClient();
OkHttpClient newClient = okHttpClient.newBuilder()
               .cache(cache)
               .connectTimeout(20, TimeUnit.SECONDS)
               .readTimeout(20, TimeUnit.SECONDS)
               .build();
  • 务器不支持缓存

    如果服务器不支持缓存就可能没有指定这个头部,或者指定的值是如no-store等,但是我们还想在本地使用缓存的话要怎么办呢?这种情况下我们就需要使用Interceptor来重写Respose的头部信息,从而让okhttp支持缓存。
    如下所示,我们重写的Response的Cache-Control字段

private static File cacheFile = new File(MyApplication.mcontext.getCacheDir().toString(), "cache");
    static int cacheSize = 10 * 1024 * 1024;
    private static Cache cache = new Cache(cacheFile, cacheSize);
    private final static OkHttpClient OK_HTTP_CLIENT = new OkHttpClient.Builder().addNetworkInterceptor(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            Response originResponse = chain.proceed(request);
            Log.e("ljl", "请求地址====" + request.url());
            Headers headers = request.headers();
            RequestBody body = request.body();
            for (int i = 0; i < headers.size(); i++) {
                Log.e("ljl", headers.name(i) + "========" + headers.value(i));
            }
            return originResponse.newBuilder().removeHeader("pragma").removeHeader("Cache-Control").header("Cache-Control", "max-age=" + 3600 * 24 * 30).build();
        }
    }).cache(cache)
            .build();

很简单的方式就能实现okhttp的网络数据缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值