RxJava如何与Retrofit结合参考:http://blog.csdn.net/jdsjlzx/article/details/52015347

缓存配置

app网络数据的离线缓存实现有很多种办法,例如存进数据库(保存json使用时拿出来解析),存专有文件,或SharedPreference等等,也可以自己实现 LruCache 和 DiskLruCache 这两种缓存策略构成二级缓存(内存和磁盘)

缓存对于移动端是非常重要的存在:

减少请求次数,减小服务器压力. 
本地数据读取速度更快,让页面不会空白几百毫秒。 
在无网络的情况下提供数据。 
okhttp的缓存设计和浏览器的缓存设计差不多,可以通过添加响应头的形式进行缓存处理。

retrofit是依赖okhttp的一套RESTful架构的Android(Java)客户端实现,通过构造retrofit时的 .client() 方法更改其中的okhttp的实现,从而达到缓存的效果,在这里不介绍retrofit的具体用法。

下面是一个例子实现了有网缓存,无网络只读取缓存

File cacheFile = new File(APP.getContext().getExternalCacheDir(),"ZhiBookCache");
Cache cache = new Cache(cacheFile,1024*1024*50);
Interceptor interceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (!HttpUtils.isNetworkConnected(APP.getContext())) {
request = request.newBuilder()
.cacheControl(CacheControl.FORCE_CACHE)
.build();
}
Response response = chain.proceed(request);
if (HttpUtils.isNetworkConnected(APP.getContext())) {
int maxAge = 0 * 60;
// 有网络时 设置缓存超时时间0个小时
response.newBuilder()
.header("Cache-Control", "public, max-age=" + maxAge)
.removeHeader("Pragma")// 清除头信息,因为服务器如果不支持,会返回一些干扰信息,不清除下面无法生效
.build();
} else {
// 无网络时,设置超时为4周
int maxStale = 60 * 60 * 24 * 28;
response.newBuilder()
.header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
.removeHeader("Pragma")
.build();
}
return response;
}
};
client = new OkHttpClient.Builder().cache(cache)
.addInterceptor(interceptor)
.build();
retrofit = new Retrofit.Builder()
.baseUrl(RetrofitAPI.BASIC_DAILY)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(client)
.build();
retrofitAPI = retrofit.create(RetrofitAPI.class);

之后调用下面代码获取请求后的序列化对象

retrofitAPI.getDaily()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<DailyBean>() {
@Override
public void onCompleted() {}
@Override
public void onError(Throwable e) {
Log.d(TAG,e.getMessage());
}
@Override
public void onNext(DailyBean bean) {
listener.onGetDailySuccess(bean);
}
});

最后附上retrofit接口部分:

@GET("news/latest")
Observable<DailyBean> getDaily();
 

Android Retrofit RxJava实现缓存的更多相关文章

  1. Android Retrofit+RxJava 优雅的处理服务器返回异常、错误

    标签: 开始本博客之前,请先阅读: Retrofit请求数据对错误以及网络异常的处理 异常&错误 实际开发经常有这种情况,比如登录请求,接口返回的 信息包括请求返回的状态:失败还是成功,错误码 ...

  2. Android MVP开发模式及Retrofit + RxJava封装

    代码已上传到Github,因为接口都是模拟无法进行测试,明白大概的逻辑就行了! 欢迎浏览我的博客--https://pushy.site 1. MVP模式 1.1 介绍 如果熟悉MVP模式架构的话,对 ...

  3. Android MVP+Retrofit+RxJava实践小结

    关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava ...

  4. 82.Android之MVP+Retrofit+RxJava实践小结

    转载:http://wuxiaolong.me/2016/06/12/mvpRetrofitRxjava/ 关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛 ...

  5. 基于Retrofit+RxJava的Android分层网络请求框架

    目前已经有不少Android客户端在使用Retrofit+RxJava实现网络请求了,相比于xUtils,Volley等网络访问框架,其具有网络访问效率高(基于OkHttp).内存占用少.代码量小以及 ...

  6. Android 网络请求Retrofit + RxJava

    一.背景 经常看到项目用Retrofit+RxJava+RxAndroid的框架,为了看懂项目的结构.现在来了解一下,Retrofit: Retrofit是Square 公司开发的一款正对Androi ...

  7. Android Retrofit 2.0 使用-补充篇

    推荐阅读,猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava 4.RxBus 5.Android MVP+Retrofit+RxJava实践小 ...

  8. Android使用RxJava+Retrofit2+Okhttp+MVP练习的APP

    Android使用RxJava+Retrofit2+Okhttp+MVP练习的APP 项目截图     这是我的目录结构 五步使用RxJava+Retrofit2+Okhttp+RxCache 第一步 ...

  9. Retrofit + RxJava + OkHttp 让网络请求变的简单-基础篇

    https://www.jianshu.com/p/5bc866b9cbb9 最近因为手头上的工作做完了,比较闲,想着做一些优化.看到以前用的那一套网络框架添加一个请求比较麻烦,并且比较难用,所以想改 ...

随机推荐

  1. 我给女朋友讲编程总结建议篇,怎么学习html和css

    总共写了11篇博客了,7篇讲html的,4篇讲网络的.不敢说写的多么好吧,最起码的是我迈出了写作的第一步,写作的过程中了解了一些其他的知识,比如SEO.几种重定向等,由于个人能力和见识有限,写出来的东 ...

  2. "R6002 floating point support not loaded"错误

    R6002 floating point support not loaded 错误,在Debug模式下会弹出如下错误: "floating point support not loaded ...

  3. POJ2796 Feel Good -- 单调队列

    Feel Good Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 14489   Accepted: 4015 Case T ...

  4. selenium webdriver——控制浏览器

    from selenium import webdriver import time def controlBrowser(): #启动浏览器 driver = webdriver.Firefox() ...

  5. 使用xcache加速PHP运行

    XCache 是一个开源的 opcode 缓存器/优化器, 这意味着他能够提高您服务器上的 PHP 性能. 他通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接使用缓冲区已编 ...

  6. 【Luogu】P2485计算器(快速幂,exgcd和Bsgs模板)

    题目链接 题目描述非常直接,要求你用快速幂解决第一问,exgcd解决第二问,bsgs解决第三问. emmmm于是现学bsgs 第二问让求最小整数解好烦啊…… 假设我们要求得方程$ax+by=c(mod ...

  7. POJ 2686 Traveling by Stagecoach(状压二维SPFA)

    Traveling by Stagecoach Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3407   Accepted ...

  8. 个人环境搭建——ANT安装

    ANT安装 ant的安装有两种方式: 第一种,手动安装 (1)首先需要在Apache官网下载最新版的Ant,下载地址为:http://ant.apache.org/bindownload.cgi   ...

  9. PE第n弹

    PE201 -- F[i][j][k] 和为i前j个选了k个方案数.因为值域很小. PE202 -- 那个反射其实挺酷炫的,你考虑把它的镜面反射去掉,把它扩展成一个无限大的正三角网格.. PE410 ...

  10. python之正则表达式【转】

    首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计 ...