Retrofit集成网络缓存

来源:互联网 发布:中国万网域名申请流程 编辑:程序博客网 时间:2024/06/01 09:16

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 获取结果

阅读全文
0 0
原创粉丝点击