美文网首页
OkHttp启用接口缓存(Get请求)

OkHttp启用接口缓存(Get请求)

作者: 好学人 | 来源:发表于2019-07-13 18:32 被阅读0次

第1步:导入依赖

implementation("com.squareup.okhttp3:okhttp:3.12.3")

第2步:添加权限

<uses-permission android:name="android.permission.INTERNET" />

第3步:在拦截器中修改响应头

// 创建缓存拦截器对象
Interceptor interceptor = new Interceptor() {
    @Override
    public Response intercept(Chain chain) throws IOException {
        // 网络请求对象
        Request request = chain.request();
        // 继续请求服务器
        Response response = chain.proceed(request);
        // 改造Response
        return response.newBuilder()
                .removeHeader("Pragma") // 移除原缓存请求头
                .header("Cache-Control", "max-age=3600") // 添加缓存控制策略
                .build(); // 构建Response
    }
};

第4步:启用OkHtpp接口缓存

// 保存缓存文件的路径
File cacheDir = context.getCacheDir();
// 创建OkHttp缓存对象
Cache cache = new Cache(cacheDir, 1024 * 1024);
// 创建OkHttp对象
OkHttpClient client = new OkHttpClient.Builder()
        .addNetworkInterceptor(interceptor) // 注:必须是addNetworkInterceptor()才有效
        .cache(cache) // 启用OkHttp接口缓存
        .build();
// 创建请求对象
Request request = new Request.Builder()
        .url("https://gitee.com/Haoxueren/server/raw/master/columns/person.json")
        .get()
        .build();

第5步:异步请求服务器

// 异步请求服务器
Call call = client.newCall(request);
call.enqueue(new Callback() {
    @Override
    public void onResponse(Call call, Response response) throws IOException {
        System.out.println(response.cacheControl());
        System.out.println(response.body().string());
    }

    @Override
    public void onFailure(Call call, IOException e) {
        System.out.println(e.getMessage());
    }
});

总结

  1. 对于不支持缓存的接口,需要通过拦截器为其动态添加缓存响应头(Cache-Control),以使该接口支持缓存;对于支持缓存的接口,则无需使用拦截器修改响应头。

  2. 添加拦截器时,必须使用cliend.addNetworkInterceptor(interceptor)方法,使用cliend.addInterceptor(interceptor)方法无效。

  3. context.getCacheDir()为应用内目录,不需要读写SD卡权限。

相关文章

  • OkHttp启用接口缓存(Get请求)

    第1步:导入依赖 第2步:添加权限 第3步:在拦截器中修改响应头 第4步:启用OkHtpp接口缓存 第5步:异步请...

  • OkHttp高效开发介绍

    一.开启OKHttp缓存OKHTTP有自己的网络缓存机制,针对GET请求 有网时 获取数据并缓存,没网时会看是否有...

  • Okhttp基本使用总结:

    引入库: okhttp内部封装功能: 创建Okhttp对象方式: get请求: post请求:

  • Android三方库之OKHttp源码分析

    一、OKHttp请求流程 OKHttp内部的大致请求流程图如下所示: 如下为使用OKHttp进行Get请求的步骤:...

  • NSURLCache缓存的使用

    缓存策略 App 中有3种网络缓存存策略(只对 get 请求做缓存) 1.不返回缓存数据,实时返回接口数据 2.首...

  • Android okHttp网络请求之Get/Post请求

    Android okHttp网络请求之Get/Post请求 异步同步

  • OkHttp详解

    OkHttp用法 同步和 异步请求 源码解析 Interceptor 是okHttp最核心的东西 网络请求 缓存,...

  • iOS 网络缓存

    常见的网络数据缓存方式 GET网络请求缓存 概述 首先要知道,POST请求不能被缓存,只有 GET 请求能被缓存。...

  • Retrofit和OkHttp使用网络缓存数据

    OkHttp缓存优化你的应用 Okhttp缓存原理 我们先从HTTP协议开始入手,关于缓存的HTTP请求/返回头由...

  • OkHttp讲解(一)

    OkHttp讲解(一)OkHttp讲解(二)OkHttp讲解(三) 一、OKHTTP使用 1、GET请求 2、PO...

网友评论

      本文标题:OkHttp启用接口缓存(Get请求)

      本文链接:https://www.haomeiwen.com/subject/vjvmkctx.html