取数据先检查缓存的场景
取数据,首先检查内存是否有缓存
然后检查文件缓存中是否有
最后才从网络中取
前面任何一个条件满足,就不会执行后面的
final Observable<String> memory = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
if (memoryCache != null) {
subscriber.onNext(memoryCache);
} else {
subscriber.onCompleted();
}
}
});
Observable<String> disk = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
String cachePref = rxPreferences.getString("cache").get();
if (!TextUtils.isEmpty(cachePref)) {
subscriber.onNext(cachePref);
} else {
subscriber.onCompleted();
}
}
});
Observable<String> network = Observable.just("network");
//主要就是靠concat operator来实现
Observable.concat(memory, disk, network)
.first()
.subscribeOn(Schedulers.newThread())
.subscribe(s -> {
memoryCache = "memory";
System.out.println("--------------subscribe: " + s);
});
界面需要等到多个接口并发取完数据,再更新
//拼接两个Observable的输出,不保证顺序,按照事件产生的顺序发送给订阅者
private void testMerge() {
Observable<String> observable1 = DemoUtils.createObservable1().subscribeOn(Schedulers.newThread());
Observable<String> observable2 = DemoUtils.createObservable2().subscribeOn(Schedulers.newThread());
Observable.merge(observable1, observable2)
.subscribeOn(Schedulers.newThread())
.subscribe(System.out::println);
}
一个接口的请求依赖另一个API请求返回的数据
举个例子,我们经常在需要登陆之后,根据拿到的token去获取消息列表。
这里用RxJava主要解决嵌套回调的问题,有一个专有名词叫
Callback hell
NetworkService.getToken("username", "password")
.flatMap(s -> NetworkService.getMessage(s))
.subscribe(s -> {
System.out.println("message: " + s);
});
界面按钮需要防止连续点击的情况
RxView.clicks(findViewById(R.id.btn_throttle))
.throttleFirst(1, TimeUnit.SECONDS)
.subscribe(aVoid -> {
System.out.println("click");
});
响应式的界面
比如勾选了某个checkbox,自动更新对应的preference
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
RxSharedPreferences rxPreferences = RxSharedPreferences.create(preferences);
Preference<Boolean> checked = rxPreferences.getBoolean("checked", true);
CheckBox checkBox = (CheckBox) findViewById(R.id.cb_test);
RxCompoundButton.checkedChanges(checkBox)
.subscribe(checked.asAction());
复杂的数据变换
Observable.just("1", "2", "2", "3", "4", "5")
.map(Integer::parseInt)
.filter(s -> s > 1)
.distinct()
.take(3)
.reduce((integer, integer2) -> integer.intValue() + integer2.intValue())
.subscribe(System.out::println);//9
分享到:
相关推荐
RxJava中BehaviorSubject适合的使用场景代码
Android中RxJava的使用。
demo中有几个常见的Rxjava2中使用的场景,然后使用中有常见的有,在一个界面中有不同的接口请求,可以使用zip控制,使接口中的数据同一时间返回来,但是在zip中 apply()必须返回一个json,就是不同接口转换成一个...
通过网上大神的博客收集的RxJava使用测试,自己实际测试一下看看效果,增强理解
RxJava2 使用简介 android使用简介 完整代码 教你怎么使用
又一个无损图片压缩处理库,这个库可能没有上面那个库厉害,但是这个库可以和RXJava配合使用,实现处理链式化,所以如果是RXJava深度用户的话,可以去看看。
博客地址:http://blog.csdn.net/kong_gu_you_lan/article/details/73504345 GitHub地址:https://github.com/alidili/Demos/tree/master/RetrofitDemo
深入浅出讲述了RxJava + RxAndroid的使用,有详尽的注释即案例。博客中也有相应章节讲述以及效果图。
RXJava中文帮助文档,感谢翻译人员
一个使用RxJava和MVP的demo,强烈推荐入门者学习
前段时间花了点时间学了一下RxJava和Retrofit2,后面在实践中被没有用到,今天一看,呃,都基本上忘掉了。 在这里总结记录一下。
介绍了RxJava中Single的使用方法,有兴趣的可以下载,总结的比较全
给大家详细介绍了RxJava中多种场景的实现,对大家学习使用RxJava具有一定的参考借鉴价值,有需要的朋友们可以参考学习,下面来一起看看吧。
使用rxjava回收页面。
这个是使用Rxjava的一个小的Demo,对于初学的人比较有帮助
最近看见很多人都在讨论rxjava,所以我写了一些相关的代码,传到这里,交流学习
Retrofit+RxJava的使用 ,博客地址:http://blog.csdn.net/dickyqie/article/details/54882106
Retrofit和Rxjava的结合使用,还有Retrofit的单独使用,实际接口演示。封装了Rxjava让代码更加简洁。如果还有不完善的地方希望指出。
RxJava框架时序图-基本的RxJava例子, RxJava框架时序图-基本的RxJava例子