作者博客 http://www.jianshu.com/u/c50b715ccaeb 前言 上个月RxJava2正式版发布了,但目前国内的资料还比较少,以前使用过RxJava1只需要看看更新文档就知道怎么使用了...,但还有一些以前没用过RxJava的朋友可能就不知道怎么办了,不知道该看RxJava1还是直接跳到RxJava2。...所以写下这个教程, 帮助那些没有用过RxJava的朋友入门。 注:如果你觉得写得不好,请直接批评指出。 我先回答这个问题:学习RxJava2需要先学习RxJava1吗?...答案明显不是,如果你以前学过RxJava1,那么对于RxJava2只需要看看更新了哪些东西就行了,其最核心的思想并没有变化,如果你没学过RxJava1,没有关系,直接学习RxJava2。...所以作为一个RxJava2的教程,本文中所有的名词都属于RxJava2中,并不涉及RxJava1。
RxJava2 RxJava2 发布已经有一段时间了,是对 RxJava 的一次重大的升级,由于我的一个库cv4j使用了 RxJava2 来尝鲜,但是 RxJava2 跟 RxJava1 是不能同时存在于一个项目中的...RxJava1 跟 RxJava2 不能共存 如果,在同一个module中同时使用RxJava1和RxJava2,类似如下: compile 'io.reactivex.rxjava2:rxandroid...Rxjava1和Rxjava2无法共存.jpeg 同理,在 App 中如果使用了 Rxjava2,但是某个第三方的 library 还在使用 Rxjava1 也会遇到同样的错误。...所以在 RxJava2 中 Observable 不再支持 backpressure ,而使用新增的 Flowable 来支持 backpressure 。...对于老手,RxJava2 还是使用原来的思想,区别不大,从 RxJava1 迁移到 Rxjava2 也花不了多少工夫。
RxJava1与RxJava2的区别 说到区别,可能有的小伙伴会问,我没看过rxjava1。可以直接看rxjava2么。...那么两者的区别体现在哪呢?主要是如下几个方面: 空指针问题这应该是一个很大的变化,用过rxjava1的人都知道,我们可以在发射事件的时候传入NULL。但这在rxjava2中是不存在的。不信你试试?...Function相关的在rxjava1中,我们有各种Func1,Func2......,但在rxjava2中只有Function了。依旧记得看凯哥的文章的时候把我整蒙了。...我们知道在Rxjava1中Observable对backpressure是支持的。但在Rxjava2中Observable取消了对backpressure的支持。...而里面的Disposable则是用来切断上下游的关系的。 onNext:普通的事件。将要处理的事件添加到队列中。 onError:事件队列异常,在事件处理过程中出现异常情况时,此方法会被调用。
目前有两个版本RxJava1和RxJava2,推荐使用RxJava2,RxJava1已经停止支持了 ReactiveX即Reactive Extensions,它通过可观测的序列,实现了组合异步和事件驱动...,数据变化观察者立马就可以对变化做出"响应" 初识函数式编程 从java8中的stream到RxJava的转变 RxJava的一些API介绍 创建Observable的基本方式...hot:只能获取从订阅那一刻开始的数据,后续订阅的不能获取之前已经产生的数据 Observer的方法介绍 onNext : 每次想通知 Observer 数据变化的时候,Observer的onNext...1个数据 ReplaySubject能获取订阅前已经产生的所有数据 AsyncSubject只获取最后一个数据 RxJava1中部分实例的实现 User user = new User(); user.setAge...中的部分案例 Observable.just(1).subscribe(new Consumer() { @Override public void accept
类型 RxJava中常见的变换操作符如下: 下面,我将对每种操作符进行详细介绍 注:本文只讲解RxJava2在开发过程中常用的变换操作符 3....应用场景 & 对应操作符 介绍 下面,我将对 RxJava2 中的变换操作符进行逐个讲解 注:在使用RxJava 2操作符前,记得在项目的Gradle中添加依赖: dependencies {...与 RxJava1 不能共存,即依赖不能同时存在 } 3.1 Map() 作用 对 被观察者发送的每1个事件都通过 指定的函数 处理,从而变换成另外一种事件 即, 将被观察者发送的事件转换为任意的类型事件...,即 严格按照旧序列发送事件的顺序 3.4 Buffer() 作用 定期从 被观察者(Obervable)需要发送的事件中 获取一定数量的事件 & 放到缓存区中,最终发送 原理 应用场景...至此,关于RxJava2中主要的变换操作符已经讲解完毕 4.
下面,我将对每种操作符进行详细介绍 注:本文只讲解RxJava2在开发过程中常用的变换操作符 ---- 3....应用场景 & 对应操作符 介绍 下面,我将对 RxJava2 中的变换操作符进行逐个讲解 注:在使用RxJava 2操作符前,记得在项目的Gradle中添加依赖: dependencies {...与 RxJava1 不能共存,即依赖不能同时存在 } 3.1 Map() 作用 对 被观察者发送的每1个事件都通过 指定的函数 处理,从而变换成另外一种事件 即, 将被观察者发送的事件转换为任意的类型事件...过程解释 下面,我将通过一个图来解释Buffer()原理 & 整个例子的结果 ? 至此,关于RxJava2中主要的变换操作符已经讲解完毕 ---- 4....总结 下面,我将用一张图总结 RxJava2 中常用的变换操作符 ?
类型 RxJava2中,过滤操作符的类型包括: 下面,我将对每个操作符进行详细讲解 3....rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0.7' // 注:RxJava2 与 RxJava1 不能共存,...: "+ integer); } }); // 使用2:过滤事件序列中 连续重复的事件 // 下面序列中,连续重复的事件...,当出现越界情况(即获取的位置索引 > 发送事件序列长度)时,即抛出异常 具体使用 Observable.just(1, 2, 3, 4, 5) .elementAtOrError...: "+ integer); } }); 测试结果 至此,RxJava2中常用的过滤操作符讲解完毕。
作用 通过设置函数,判断被观察者(Observable)发送的事件是否符合条件 ---- 2. 类型 RxJava2中,条件 / 布尔操作符的类型包括: ? 下面,我将对每个操作符进行详细讲解 3....:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0.7' // 注:RxJava2 与 RxJava1 不能共存,即依赖不能同时存在...至此,RxJava2中常用的条件 / 布尔操作符讲解完毕 ---- 4....总结 下面,我将用一张图总结 RxJava2 中常用的条件 / 布尔操作符 ?...下面我将继续对RxJava2的其他操作符进行深入讲解 ,有兴趣可以继续关注Carson_Ho的安卓开发笔记 ---- 请评论帮顶 / 点赞!因为你的鼓励是我写作的最大动力!
作用 过滤 / 筛选 被观察者(Observable)发送的事件 & 观察者 (Observer)接收的事件 ---- 2. 类型 RxJava2中,过滤操作符的类型包括: ?...:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0.7' // 注:RxJava2 与 RxJava1 不能共存,即依赖不能同时存在...elementAtOrError() 作用 在elementAt()的基础上,当出现越界情况(即获取的位置索引 > 发送事件序列长度)时,即抛出异常 具体使用 Observable.just(1,...至此,RxJava2中常用的过滤操作符讲解完毕。 ---- 4....总结 下面,我将用一张图总结 RxJava2 中常用的条件 / 布尔操作符 ?
所以执行结果可能是"from future1"、"from future2"、"from future3"中的任意一个。...anyOf 和 acceptEither、applyToEither的区别在于,后两者只能使用在两个future中,而anyOf可以使用在多个future中。...3.8 CompletableFuture异常处理 CompletableFuture在运行时如果遇到异常,可以使用get()并抛出异常进行处理,但这并不是一个最好的方法。...,可以捕获任意阶段的异常。...CompletableFuture VS Java8 Stream VS RxJava1 & RxJava2 CompletableFuture 有很多特性跟RxJava很像,所以将CompletableFuture
与 RxJava1 不能共存,即依赖不能同时存在 2....增加被观察者的新实现:Flowable 由于 RxJava 1.0 中 的被观察者Observable不能很好地支持背压(Backpressure) 所以,在 RxJava 2.0 中 增加了被观察者的新实现...的接口方法都允许抛出异常 即,接口方法里加上了 throws Exception // Action接口 public interface Action { void run() throws...这意味着,在这些方法里调用会发生异常的方法不需要try-catch // 2....); RxJava 2.0 实现的是io.reactivex.ObservableTansformer 一个独立的接口 中的用法
作用 通过设置函数,判断被观察者(Observable)发送的事件是否符合条件 2. 类型 RxJava2中,条件 / 布尔操作符的类型包括: 下面,我将对每个操作符进行详细讲解 3....:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0.7' // 注:RxJava2 与 RxJava1 不能共存,即依赖不能同时存在...具体代码 // 设置2个需要发送的Observable & 放入到集合中 List> list= new ArrayList...中常用的条件 / 布尔操作符讲解完毕 4....Demo地址 上述所有的Demo源代码都存放在:Carson_Ho的Github地址:RxJava2_功能性操作符 5. 总结 下面,我将用一张图总结 RxJava2 中常用的条件 / 布尔操作符
于是,我在网上找到了RxJavaComputationExpressions, 做了一些修改将RxJava1升级到RxJava2,增加了对Flowable的支持。..."this is default")) .subscribe((Consumer)(s) -> {System.out.println("s="+s);}); switchCase()中,...第一个参数返回的是Map中的key,它支持范型,所以switchCase()相对于switch case语句而已能够支持更多种类型。...,区别在于订阅时需要根据key从map中取到对应的Observable/Flowable,取不到则使用defaultCase。...总结 这个库其实很简单,编写它的同时我加深了对RxJava中Observable/Flowable原理的认识。
与 RxJava1 不能共存,即依赖不能同时存在 ---- 2....增加被观察者的新实现:Flowable 由于 RxJava 1.0 中 的被观察者Observable不能很好地支持背压(Backpressure) 所以,在 RxJava 2.0 中 增加了被观察者的新实现...的接口方法都允许抛出异常 即,接口方法里加上了 throws Exception // Action接口 public interface Action { void run() throws...这意味着,在这些方法里调用会发生异常的方法不需要try-catch // 2....中 Rxjava 2.0 的一系列文章,包括原理、操作符、应用场景、背压等等 ,有兴趣可以继续关注Carson_Ho的安卓开发笔记!!
:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0.7' // 注:RxJava2 与 RxJava1 不能共存...:直接发送 传入的数组数据 会将数组中的数据转换为Observable对象 应用场景 快速创建 被观察者对象(Observable) & 发送10个以上事件(数组形式) 数组元素遍历 具体使用...:仅发送Error事件,直接通知异常 // 可自定义异常 Observable observable2=Observable.error(new RuntimeException()) // 即观察者接收后会直接调用...中的创建操作符讲解完毕。...Demo地址 上述所有的Demo源代码都存放在:Carson_Ho的Github地址:RxJava2_创建操作符 6. 总结 下面,我将用1张图总结 RxJava2 中常用的创建操作符
:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0.7' // 注:RxJava2 与 RxJava1 不能共存...,直接通知异常 // 可自定义异常 Observable observable2=Observable.error(new RuntimeException()) // 即观察者接收后会直接调用onError...rangeLong() 作用:类似于range(),区别在于该方法支持数据类型 = Long 具体使用 与range()类似,此处不作过多描述 至此,关于 RxJava2中的创建操作符讲解完毕。...Demo地址 上述所有的Demo源代码都存放在:Carson_Ho的Github地址:RxJava2_创建操作符 ---- 6. 总结 下面,我将用1张图总结 RxJava2 中常用的创建操作符 ?...接下来的时间,我将持续推出 Android中 Rxjava 2.0 的一系列文章,包括原理、操作符、应用场景、背压等等 ,有兴趣可以继续关注Carson_Ho的安卓开发笔记!! ?
之前写过一系列RxJava1的文章,也承诺过会尽快有RxJava2的介绍。无奈实际项目中还未真正的使用RxJava2,不敢妄动笔墨。...所以这次还是给大家分享一个使用RxJava1解决问题的案例,希望对大家在使用RxJava的时候有一点点启发。...App首页后,首先我们需要从数据库中获取当前城市的天气数据,如果数据库中存在天气数据则在UI页面上展示天气数据;如果数据库中未存储当前城市的天气数据,或者已存储的天气数据的发布时间相比现在已经超过了一小时...如果获取到到的天气数据发布时间和当前数据库中的天气数据发布时间一致则丢弃掉从服务端获取到的天气数据,如果不一致则更新数据库并且在页面上展示最新的天气信息。...本文中的代码在MinimalistWeather中的WeatherDataRepository类中有同样的实现,文章中为了更完整的将整个实现过程呈现出来,对代码做了部分改动。
:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0.7' // 注:RxJava2 与 RxJava1 不能共存...= 上游操作符抛出的异常,可通过该条件来判断异常的类型 // 返回Observable的Observable发送的事件 = Error事件,则原始的Observable不重新发送事件 // 该异常错误信息可在观察者中的...总结 下面,我将用一张图总结 RxJava2 中常用的功能性操作符 ?...下面我将继续对RxJava2的其他操作符进行深入讲解 ,有兴趣可以继续关注Carson_Ho的安卓开发笔记 ---- 请帮顶 / 评论点赞!因为你的鼓励是我写作的最大动力!
感兴趣的同学可以阅读上一篇文章 RxJava2 实战知识梳理(5) - 简单及进阶的轮询操作。...在Function函数中,必须对输入的 Observable进行处理,这里我们使用的是flatMap操作符接收上游的数据,对于flatMap的解释,大家可以参考 RxJava2 实战知识梳理...2.2 retryWhen 和 repeatWhen 对比 在 RxJava2 实战知识梳理(5) - 简单及进阶的轮询操作 中我们已经对repeatWhen进行了介绍,让我们再来看一下它的原理图...2.3 根据 Throwable 的类型选择响应的重试策略 由于上游可以通过onError(Throwable throwable)中的异常通知retryWhen,那么我们就可以根据异常的类型来决定重试的策略...就像我们在上面例子中做的那样,我们通过flatMap操作符获取到异常的类型,然后根据异常的类型选择动态地决定延迟重试的时间,再用Timer操作符实现延迟重试;当然,对于一些异常,我们可以直接选择不重试,
中跟RxJava1的作用是不同的。...在RxJava2中表示立即执行,如果当前线程有任务在执行,则会将其暂停,等插入进来的新任务执行完之后,再将原先未完成的任务接着执行。...在RxJava1中表示在当前线程中等待其他任务完成之后,再执行新的任务。...此时,已经在对应的Scheduler线程中运行了。 source.subscribe(parent); 在RxJava的链式操作中,数据的处理是自下而上,这点跟数据发射正好相反。...在ObserveOnObserver的onNext()中,schedule()执行了具体调度的方法。