首页 > 学院 > 开发设计 > 正文

okhttp3缓存实践

2019-11-09 17:04:20
字体:
来源:转载
供稿:网友
离线时使用cache,在线时访问网络并更新cacheOkHttpClient设置cache后,response自动进行缓存;通过拦截器,离线时request添加头信息header(“Cache-Control”, “only-if-cached”)强制使用缓存这些方法不支持cache:public static boolean invalidatesCache(String method) { return method.equals(“POST”) || method.equals(“PATCH”) || method.equals(“PUT”) || method.equals(“DELETE”) || method.equals(“MOVE”); }如果不想使用okhttp的cache机制,也可以自己通过对象序列化等方式自己保存reponse结果 //离线缓存,在线获取最新数据 File httpCacheDir = new File(getActivity().getExternalCacheDir(), "response"); Cache cache = new Cache(httpCacheDir, 10 * 1024 * 1024); OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); if(!isNetWorkAvailable()){ request = request.newBuilder() .cacheControl(CacheControl.FORCE_CACHE) .build(); } return chain.PRoceed(request); //无效,需结合addNetworkInterceptor使用 /*Response response = chain.proceed(request); if(isNetWorkAvailable()){ return response.newBuilder() .header("Cache-Control", "public, max-age=" + 0) //有网络时设置缓存超时时间0个小时 .removeHeader("Pragma") //清除头信息,因为服务器如果不支持,会返回一些干扰信息,不清除下面无法生效 .build(); }else { return response.newBuilder() .header("Cache-Control", "public, only-if-cached, max-stale=" + Integer.MAX_VALUE) .removeHeader("Pragma") .build(); }*/
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表