网站大量收购闲置独家精品文档,联系QQ:2885784924

RxJava+Retrofit+OkHttp深入浅出-终极封装五(数据持久化).doc

RxJava+Retrofit+OkHttp深入浅出-终极封装五(数据持久化).doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
RxJavaRetrofitOkHttp深入浅出-终极封装五(数据持久化)

RxJava+Retrofit+OkHttp深入浅出-终极封装五(数据持久化) 第一次请求是网络加载,之后只要在设置的保鲜时间以内都是通过缓存拉取数据,提高加载速度! 下面我们分两节讲解,一节讲述自带的retrofit-cache用法和缺陷,一节讲述自己定义的缓存处理方案 Retrofit-cookie 由于retrofit是基于okhttp的,所以他的cache原理就是运用了okhttp的cookie处理; 注意:这里自带的cookie前提是服务器提供了支持(返回头有cache信息),只有get请求才具备http的缓存功能,post没有!没有!没有 Retrofit-Cache的内容 1.http缓存相关头: Expires (实体标头,HTTP 1.0+):一个GMT时间,试图告知客户端,在此日期内,可以信任并使用对应缓存中的副本,缺点是,一但客户端日期不准确.则可能导致失效 2.Pragma : no-cache(常规标头,http1.0+) 3.Cache-Control : (常规标头,HTTP1.1) 3.1public:(仅为响应标头)响应:告知任何途径的缓存者,可以无条件的缓存该响应 3.2private(仅为响应标头):响应:告知缓存者(据我所知,是指用户代理,常见浏览器的本地缓存.用户也是指,系统用户.但也许,不应排除,某些网关,可以识别每个终端用户的情况),只针对单个用户缓存响应. 且可以具体指定某个字段.如private –“username”,则响应头中,名为username的标头内容,不会被共享缓存. 3.3no-cache:告知缓存者,必须原原本本的转发原始请求,并告知任何缓存者,别直接拿你缓存的副本,糊弄人.你需要去转发我的请求,并验证你的缓存(如果有的话).对应名词:端对端重载. cache-retrofit使用 注解使用,具体方法具体设置(max-age设置的是保鲜时间) @Headers(Cache-Control: max-age=640000) @GET(widget/list) CallListWidget widgetList(); 当然我们肯定想要动态设置,而且每一个get方法都需要缓存保鲜处理,怎么解决呢? 1.开辟一片本地空间,设置给OkHttpClient.Builder OkHttpClient.Builder builder = new OkHttpClient.Builder(); /*缓存位置和大小*/ builder.cache(new Cache(MyApplication.app.getCacheDir(),10*1024*1024)); 2.设置拦截器,请求前判断网络,拦截数据和返回本地数据 网上很多资源都是错误的,走了很多弯路,注意这里一定要返回一个新的Response 不让不会有结果显示 /** * get缓存方式拦截器 * Created by WZG on 2016/10/26. */ public class CacheInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); if (!isNetworkAvailable(MyApplication.app)) {//没网强制从缓存读取(必须得写,不然断网状态下,退出应用,或者等待一分钟后,就获取不到缓存) request = request.newBuilder() .cacheControl(CacheControl.FORCE_CACHE) .build(); } Response response = ceed(request); Response responseLatest; if (isNetworkAvailable(MyApplication.app)) { int maxAge = 60; //有网失效一分钟 responseLatest = response.newBuilder() .removeHeader(Pragma) .removeHeader(Cache-Control)

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档