Retorfit2和OkHttp3缓存
来源:互联网 发布:李炎恢javascript下载 编辑:程序博客网 时间:2024/05/22 02:16
Retorfit2和OkHttp3缓存
需求如下:当用户在有网络的情况下,设置一个”缓冲时间”,比如在请求了一次网络数据之后,接下来60s内进行网络请求其实是拿的缓存,这样做可以减少服务器负担,节约流量.
当无网络时,用缓存读取数据,数据默认保存2周.这样就可以进行离线阅读.
1.首先来配置拦截器
配置好时间等属性,再结合判断是否有网络来进行设置
public class RewriteCacheControlInterceptor implements Interceptor { private Context mContext; /** * 无网络,设缓存有效期为两周 */ private static final long CACHE_STALE_SEC = 60 * 60 * 24 * 14; /** * 有网 缓存60s */ private static final long MAX_AGE = 60; public RewriteCacheControlInterceptor(Context context) { this.mContext = context; } @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); String cacheControl = request.cacheControl().toString(); if (!DevicesUtils.hasNetworkConnected(mContext)) { request = request.newBuilder() .cacheControl(TextUtils.isEmpty(cacheControl) ? CacheControl.FORCE_CACHE : CacheControl.FORCE_NETWORK) .build(); } Response originalResponse = chain.proceed(request); if (DevicesUtils.hasNetworkConnected(mContext)) { //有网的时候连接服务器请求,缓存60s return originalResponse.newBuilder() .header("Cache-Control", "public, max-age=" + MAX_AGE) .removeHeader("Pragma") .build(); } else { //网络断开时读取缓存 return originalResponse.newBuilder() .header("Cache-Control", "public, only-if-cached, max-stale=" + CACHE_STALE_SEC) .removeHeader("Pragma") .build(); } }}
2. 初始化OkHttp3
将拦截器设置进去即可.
/*** 初始化OkHttp*/public static void initOkHttp(Context context) { //拦截器 RewriteCacheControlInterceptor mRewriteCacheControlInterceptor = new RewriteCacheControlInterceptor(context); //缓存文件 File cacheFile = context.getCacheDir(); //设置缓存大小 Cache cache = new Cache(cacheFile, MAX_CACHE_SIZE); if (cacheFile != null) { okHttpClient = new OkHttpClient.Builder() //超时设置 .readTimeout(READ_TIME_OUT, TimeUnit.SECONDS) .connectTimeout(CONNECT_TIME_OUT, TimeUnit.SECONDS) //错误重连 .retryOnConnectionFailure(true) //拦截器 .addNetworkInterceptor(mRewriteCacheControlInterceptor) .addInterceptor(mRewriteCacheControlInterceptor) //缓存 .cache(cache) .build(); } else { okHttpClient = new OkHttpClient.Builder().build(); }}
阅读全文
0 0
- Retorfit2和OkHttp3缓存
- retorfit2+okhttp3文件上传下载
- Retorfit2.0+Rxjava1+Okhttp3实现soap协议的Webservice
- RxJava2和Retorfit2引用依赖问题
- OkHttp3缓存,请求头,cookie,超时和重连
- okhttp3 retrofit2 缓存问题
- OkHttp3缓存没有生效
- okhttp3缓存实践
- Android OKhttp3缓存处理
- OkHttp3之缓存应用
- OkHttp3下配置缓存
- Picasso Okhttp3 缓存优化
- OkHttp3源码分析[缓存策略]
- Retrofit2.0+okhttp3设置缓存
- Retrofit2.0+okhttp3实现缓存
- OkHttp3源码分析[缓存策略]
- OkHttp3源码解析03-缓存
- 以 Okhttp3源码 为例 ------ 探索 缓存机制 的原理和实现(一)
- docker 容器 mysql乱码问题
- linux内核Kmalloc分配内存需要注意的问题(GFP_KERNEL可能会造成内核调度错误)
- tasklet使用
- __sched 在函数定义里面是什么意思?
- 关于在写linux driver时的ERESTARTSYS的作用
- Retorfit2和OkHttp3缓存
- kzalloc 函数详解
- Redis漏洞入侵防护方案
- springboot ajax请求数据
- hadoop遇到的坑
- Linux自旋锁
- linux内核中的fastcall和asmlinkage宏
- linux中completion结构解释
- MySQL数据库学习07-查询数据:聚合函数