Retrofit集成网络缓存

1自定义拦截器 继承拦截器

public class NetworkInterceptor implements Interceptor {

//缓存有效时间
    private final static int TIME_CACHE_HOURS = 1;

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        Response response = chain.proceed(request);

        CacheControl cacheControl = new CacheControl.Builder()
                .maxAge(TIME_CACHE_HOURS, TimeUnit.HOURS)
                .maxStale(TIME_CACHE_HOURS, TimeUnit.HOURS)
                .build();

        return response.newBuilder()
                .removeHeader("Pragma")
                //在这里生成新的响应并修改它的响应头
                .header("Cache-Control", cacheControl.toString())
                .build();
    }
}

2 在retrofit里面添加拦截器

    private RetrofitFactory(String baseUrl ,Context context) {


        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.connectTimeout(5, TimeUnit.SECONDS);
        builder.readTimeout(5, TimeUnit.SECONDS);
        builder.writeTimeout(5, TimeUnit.SECONDS);

        // 设置缓存大小
        int cacheSize = 10 * 1024 * 1024;    
        builder.addNetworkInterceptor(new NetworkInterceptor());
        builder.cache(new Cache(new File(context.getExternalCacheDir(), "http_cache")
, cacheSize));



        //1.创建Retrofit对象
        retrofit = new Retrofit.Builder().baseUrl(baseUrl) // 定义访问的主机地址
                .client(builder.build())
                .addConverterFactory(GsonConverterFactory.create())  //解析方法

                .build();

    }

3使用先获取实例:

public static  RetrofitFactory getInstance(String baseUrl,Context context) {

        instance = new RetrofitFactory(baseUrl,context);


        return instance;
    }

4通过实例调用retrofit的api 获取response 通过response.body 获取结果

猜你喜欢

转载自blog.csdn.net/qq_36331942/article/details/78594947