okhttp3缓存实践
来源:互联网 发布:赣州教育软件代理 编辑:程序博客网 时间:2024/05/01 06:00
- 离线时使用cache,在线时访问网络并更新cache
- OkHttpClient设置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(); }*/
0 0
- okhttp3缓存实践
- okhttp3 retrofit2 缓存问题
- OkHttp3缓存没有生效
- Android OKhttp3缓存处理
- OkHttp3之缓存应用
- OkHttp3下配置缓存
- Retorfit2和OkHttp3缓存
- Picasso Okhttp3 缓存优化
- OkHttp3源码分析[缓存策略]
- Retrofit2.0+okhttp3设置缓存
- Retrofit2.0+okhttp3实现缓存
- OkHttp3源码分析[缓存策略]
- OkHttp3源码解析03-缓存
- 让OkHttp3 也能缓存Post 请求
- Retrofit2,okhttp3 通过拦截器进行缓存
- RxJava2+Retrofit2+OkHttp3实现网络缓存
- OkHttp3升级实践与之前2.0对比
- OkHttp3
- Activity 启动模式
- 搭建Android源代码编译环境-linux
- Android中WebView加载页面出现白屏解决方案
- 观音山一天游
- 视频云直播中的关键帧技术探秘
- okhttp3缓存实践
- Spark经典案例7-非结构数据处理
- [Direct2D1.1教程] Direct2D特效概览
- java Split如何去除一个空格和多个空格
- Nexus搭建Maven私有仓库
- 无聊的一天
- http连接池
- js闭包的理解
- EditText自动获取焦点并弹出输入法