Retrofit + OkHttp缓存处理的示例代码
2017-09-12 17:05
651 查看
通过缓存处理可以有效降低服务器的负荷,加快APP界面加载速度,提升用户体验。Retrofit + OkHttp缓存处理流程是这样的,请求响应之后会在data/data/packageName/cache下建立一个response文件夹,保存缓存数据,后续请求时若无网络,则直接读取缓存内容,若有网络则从网络获取最新数据并缓存。
1.设置缓存路径,大小及添加缓存拦截器
//设置缓存路径 File httpCacheDirectory = new File(CommonApplication.getInstance().getCacheDir(), "responses"); //设置缓存 10M Cache cache = new Cache(httpCacheDirectory, 10 * 1024 * 1024); //创建OkHttpClient,并添加拦截器和缓存代码 OkHttpClient client = new OkHttpClient.Builder() .addNetworkInterceptor(new CacheInterceptor(CommonApplication.getInstance())) .cache(cache).build();
2.定义缓存拦截器。若网络正常,则缓存有效期1分钟;若网络异常,则缓存有效期6小时
public class CacheInterceptor implements Interceptor { private Context mContext; public CacheInterceptor(Context context) { mContext = context; } @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); if (NetworkUtils.isNetworkAvailable(mContext)) {//没网强制从缓存读取(必须得写,不然断网状态下,退出应用,或者等待一分钟后,就获取不到缓存) request = request.newBuilder() .cacheControl(CacheControl.FORCE_CACHE) .build(); } Response response = chain.proceed(request); Response responseLatest; if (NetworkUtils.isNetworkAvailable(mContext)) { int maxAge = 60; //有网失效一分钟 responseLatest = response.newBuilder() .removeHeader("Pragma") .removeHeader("Cache-Control") .header("Cache-Control", "public, max-age=" + maxAge) .build(); } else { int maxStale = 60 * 60 * 6; // 没网失效6小时 responseLatest = response.newBuilder() .removeHeader("Pragma") .removeHeader("Cache-Control") .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale) .build(); } return responseLatest; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章推荐
- okhttp3.4.1+retrofit2.1.0实现离线缓存的示例
- 【缓存策略】Retrofit+OkHttp实现缓存处理
- 单击和双击事件的冲突处理示例代码
- 处理按第一列聚合第二列的代码示例
- Retrofit缓存设置,处理UnKnownHostException异常信息
- Vue+mui实现图片的本地缓存示例代码
- Java多线程执行处理业务时间太久解决方法代码示例
- XMLHttpRequest处理xml格式的返回数据(示例代码)
- C#实现数据库事务处理示例代码
- iphone开发之通过代理模式实现自定义控件——代码示例图片库的处理
- OkHttp Retrofit RxJava 统一错误处理
- C#实现数据库事务处理示例代码
- python音频处理用到的操作的示例代码
- RxJava+Retrofit+OkHttp+网络缓存
- Python Web框架Tornado的异步处理代码示例
- Ruby中的异常处理代码编写示例
- flask中主动抛出异常及统一异常处理代码示例
- DOM4J介绍与代码示例 (强大的xml处理工具)
- ASP.NET缓存方法分析和实践示例代码第1/2页
- 通达OA 管理员菜单突然消失的问题处理及缓存清除代码(图文)