Retrofit+okhttp 缓存的
来源:互联网 发布:河北大学网络教育 编辑:程序博客网 时间:2024/05/17 18:16
关于Retrofit+OkHttp的强大这里就不多说了,还没了解的同学可以自行去百度。这篇文章主要讲如何利用Retrofit+OkHttp来实现一个较为简单的缓存策略:
即有网环境下我们请求数据时,如果没有缓存或者缓存过期了,就去服务器拿数据,并且将新缓存保存下来,如果有缓存而且没有过期,则直接使用缓存。无网环境下我们请求数据时,缓存没过期则直接使用缓存,缓存过期了则无法使用,需要重新联网获取服务器数据。
缓存处理还是很有必要的,它有效的减少服务器负荷,降低延迟提升用户体验,同时也方便用户即使在没网络的情况下也能使用APP。
之前一直有一个疑惑,既然Retrofit已经是对OkHttp的一个封装了,为什么还一直说Retrofit+OkHttp要一起搭配使用,后来才知道其实OKHttp很重要的一个作用,就是对一些网络请求的配置,例如连接超时,读取超时,以及一些缓存配置等。
一、添加依赖
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
二、配置OkHttpClient(设置缓存路径和缓存文件大小)
三、配置Retrofit
四、编写拦截器
我们知道其实Retrofit+OkHttp的缓存主要通过拦截器实现,所以主要做的功夫也在拦截器里面。
到这里,其实已经可以实现了我们开头所说的缓存效果了。
但是,上面设置的每个接口缓存时间都一样,例如我现在想让不同接口的缓存数据失效时间都不一样,甚至有些接口不缓存数据,应该怎么做呢?其实也很简单
首先我们只需要在接口前面添加@Headers参数(max-age代表缓存时间,单位为秒,示例中表示缓存失效时间为60s,想要多少时间可以自行设置),不设置@Headers参数则不进行缓存。
同时,我们的缓存拦截器也要做下简单的修改(去掉了之前的注释代码)
*注意:
1.只能缓存Get请求的接口,不能缓存Post请求的接口
2.OkHttpClient需要用.addNetworkInterceptor添加缓存拦截器,不能使用.addInterceptor,也无需两者同时使用。
3.此方法无需服务器端任何操作,适用于服务器端没有其他缓存策略,如果服务器端有自己的缓存策略代码应该做相应的修改,以适应服务器端。
附上所有代码:
- Retrofit+okhttp 缓存的
- retrofit+okhttp 实现缓存
- Android网络缓存,retrofit+okhttp
- Retrofit+OKHttp实现缓存以及遇到的问题
- 【缓存策略】Retrofit+OkHttp实现缓存处理
- Retrofit—okhttp Cache缓存策略
- Retrofit(okhttp)的动态代理
- Retrofit对OKhttp的封装
- OKhttp+Retrofit
- Okhttp的缓存优化
- 带缓存的Okhttp
- 使用 Retrofit 和 okhttp 强制缓存失效问题
- okhttp或者retrofit实现网络缓存504错误原因
- Retrofit和okhttp的了解和使用
- Retrofit+OKhttp+RxJava框架的封装
- 1、Retrofit+Okhttp的基本使用
- 基于Rxjava+Retrofit+Okhttp的webservices访问
- RxJava+okhttp+Retrofit+Mvp 的封装
- CodeForces 611B - New Year and Old Property(搜索)
- Shell编程中函数部分的相关讲解
- 设计器弹出窗口信息无法显示
- PAT 1043. 输出PATest(20)
- 快速排序
- Retrofit+okhttp 缓存的
- 209. Minimum Size Subarray Sum
- 关于容器的理解
- 开通博客
- 动态规划入门 HDU 1466-计算直线的交点数
- ubuntu16.04安装chrome
- pch文件
- Java 序列化的高级认识
- CoreData 从入门到精通 二 数据的增删改查