Skip to content

lxhAndSmh/MvpDemo

Repository files navigation

Rxjava的使用(所有示例基于RxJava2.0)

学习的文档如下(感谢各位):

Disposable的使用

Disposable的示例

Disposable类:

  • dispose():主动解除订阅
  • isDisposed():是否解除了订阅

CompositeDisposable的使用:快速接触所有添加的Disposable类,每当得到一个Disposable时就调用;

  • CompositeDisposable.add():将Disposable添加到容器中
  • CompositeDisposable.clear():退出页面时调用该方法,可快速解除所有订阅

Single的使用

Single是Obserable的变种,它总是只发射一个值,或者一个错误的通知,而不是发射一系列的值。 因此,订阅Single只需要两个方法:

  • onSuccess Single发射单个值到这个方法
  • onError 如果无法发射需要的值,Single发射一个Throwable对象到这个方法

Single只会调用这两个方法中的一个,而且只会调用一次,调用了任何一个方法之后,订阅关系终止。

Single的操作符

Single的示例

Single也可以组合使用多种操作,一些操作符让你可以混合使用Observable和single:

  • compose: 返回值Single,作用是创建一个自定义的操作符。
  • concat and concatWith: 返回值Observable或者Flowable,作用是连接多个Single和Observable发射的数据
  • create: 返回值Single,调用观察者的create方法创建一个Single
  • error: 返回值Single,返回一个立即给订阅者发射错误通知的Single
  • flatMap: 返回值Single,返回一个Single,它发射对原Single的数据执行flatMap操作后的结果
  • flatMapObservable: 返回值DisposableObserver,返回一个DisposableObserver,它发射对原Single的数据执行flatMap操作后的结果
  • from: 返回值Single,将Future转换成Single
  • just: 返回值Single,返回一个发射一个指定值的Single
  • map: 返回值Single,返回一个Single,它发射对原Single的数据执行map操作后的结果
  • merge and mergeWith: 返回返回FlowableSubscriber,合并发射来自多个Single的数据
  • observeOn: 返回Single,指示Single在指定的调度程序上调用订阅者的方法
  • onErrorReturn: 返回Single,将一个发射错误通知的Single转换成发射特定数据项的Single
  • subscribeOn: 返回Single,指示Single在指定的调度程序上执行操作
  • timeout: 返回Single,它给原有的Single添加超时控制,如果超时了就发射一个错误通知
  • zip and zipWith: 返回Single,将多个Single转换为一个,后者发射的数据是对前者应用一个函数后的结果
Completable的使用

Completable的示例

用于不需要知道任何返回值,只需要知道是否结束或错误 使用场景:例如请求接口更新服务端数据,我们只需要知道是否更新成功,不需要知道更新后返回的数据。

创建操作

创建操作法的示例

Defer的使用

直到有观察者订阅的时候才创建Observable(通过使用Observable工厂方法生成一个新的Observable),并且为每个观察者创建一个新的Observable。 它对每个观察者都这样做,因此尽管每个订阅者都以为自己订阅的是同一个Observable,事实上每个订阅者获取的是它们自己单独的数据序列。 在某些情况下,等待直到订阅发生时才生成Observable,可以确保Observable包含最新的数据。

Interval的使用

Interval操作符返回一个Observable,它按固定的时间间隔发射一个无限递增的整数序列(从0开始发射)。

  • interval(long, TimeUntil): 接受一个表示时间间隔的参数和一个表示时间单位的参数
  • interval(long, long, TimeUntil): 它在指定延迟之后发射零值,然后按照指定的时间间隔发射递增的数字。
Range的使用

返回一个发射特定整数序列的Observable。 rang操作符发射一个范围内的有序整数序列,可以指定范围的起始值和长度。 rang(int, int):两个参数,一个是范围的起始值,一个是范围的数据的数目。如果第二个参数设为0,将导致Observable不发射任何数据(如果设置为负数,将抛异常)。

Repeat的使用
  • repeat():重复地发射数据,它不是创建一个Observable,而是重复发射原始Observable的数据序列,这个序列是无限的。
  • repeat(n):指定重复的次数
  • repeatWhen:它不是缓存和重放原始Observable的数据序列,而是有条件的重新订阅和发射原来的Observable。
Timer的使用

创建一个Observable,它在一个给定的延迟后发射一个简单的数字0

变换操作

Map操作符的使用

Map的示例

Map操作符对原始Observable发射的每一项数据应用一个你选择的函数,然后返回一个发射这些结果的Observable。 RxJava将这个操作符实现为map函数,这个操作符默认不在任何特定的调度器上执行。

Buffer的使用

Buffer的示例 定期收集Observable的数据放进一个数据包裹,然后发射这些数据包裹,而不是一次发射一个值。 Buffer操作符将一个Observable变换成另一个,原来的Observable正常发射数据,变换产生的Observable发射这些数据的缓存集合; 每一个缓存至多包含来自原始Observable的count项数据(最后发射的数据可能少于count项)

注意:如果原来的Observable发射一个onError通知,Buffer会立即传递这个通知,而不是首先发射缓存数据,即使在之前的缓存中 包含了原始Observable发射的数据。

buffer(count, skip)从原始Observable的第一项数据开始创建新的缓存,用count项数据填充缓存(开头的一项和count-1项中间的数据, 然后以列表List的形式发射缓存,这些缓存可能有重叠部分(比如skip < count时),也可能有间隙(如:skip > count时) buffer(count) 不传skip时,缓存的数据不会有重叠,等效于传递一个count相同值的skip

结合操作

Zip的使用

Zip的示例

zip操作符返回一个Observable,它使用这个函数按顺序结合两个或多个Observables发射的数据项,然后 它发射这个函数返回的结果;zip的最后一个参数接收每个Observable发射的数据,返回被压缩后的数据(最多可以有九个Observable参数)

Merge的使用

Merge的示例

  • merge:合并多个Observable的发射物;任何一个原始的Observable的onError通知会被立即传递给观察者,而且会终止合并后的Observable。 merge可能让合并的Observables发射的数据交错(类似的操作符Concat不会让数据交错,它会按顺序一个接一个发射多个Observables的发射物)
  • mergeWith: merge是静态方法,mergeWith是对象方法, Observable.merge(obser1, obser2)等价于Obser1.mergeWith(obser2)

过滤操作

Take的使用

Take的示例

  • take(n): 使用Take操作符可以修改Observable的行为,只发射前面的N项数据,然后发射完成通知,忽略剩余的数据。 (如果Observable发射的数据少于N项,take操作生成的Observable不会抛异常或发射onError通知,它会发射相同的少量数据)
  • 变体take(long, TimeUnit): 这个变体接收的是一个时长而不是数量参数。它会发射Observable开始的那段时间发射的数据,时长和时间单位通过参数指定。
  • akeLast(int)操作符:发射Observable的最后N项数据
  • 变体takeLast(long, TimeUnit): 这个变体接收的是一个时长而不是数量参数。它会发射Observable结束的那段时间发射的数据,时长和时间单位通过参数指定。
  • takeUntil:发送complete的结束条件,发送结束之前也会包括这个值
  • takeWhile:当不满足这个条件时,会发送结束,切不包括这个值
Filter的使用

Filter的示例

  • Filter操作符,使用你指定的一个函数测试数据项,只有通过测试的数据才会发射。
  • ofType是filter操作符的一个特殊形式,它过滤一个Observable只返回指定类型的数据。
Skip的使用

Skip的示例

  • skip(int): 你可以忽略Observable发射的前N项数据,只保留之后的数据。
  • skip(long, TimeUnit): skip的变体,这个变体接收一个时长,而不是数量参数。它会丢弃原始Observable开始的那段时间发射的数据,时长和时间单位通过参数指定
  • skipLast(int): 你可以忽略Observable发射的后N项数据,只保留之前的数据。
  • skipLast(long, TimeUnit): skipLast的变体,这个变体接收一个时长,而不是数量参数。它会丢弃原始Observable结束的那段时间发射的数据,时长和时间单位通过参数指定
  • SkipUntil操作符,丢弃原始Observable发射的数据,直到第二个Observable发射了一项数据 SkipUntil订阅原始的Observable,但是忽略它的发射物,直到第二个Observable发射了一项数据那一刻,它开始发射原始Observable。
  • SkipWhile操作符,丢弃Observable发射的数据,直到一个指定的条件不成立。 SkipWhile订阅原始的Observable,但是忽略它的发射物,直到你指定的某个条件变为false的那一刻,它开始发射原始Observable

算术和聚合操作

算术和聚合操作的示例

concat、concatWith和merge操作符

  • concat:不交错的发射两个或多个Observable发射的数据 Concat操作符链接多个Observable的输出,第一个Observable发射的所有数据在第二个Observable发射的任何数据前面,以此类推。
  • merge操作符和concat差不多,它结合两个或多个Observable的发射物,但是数据可能交错,而Concat不会让多个Observable的发射物交错。
  • 还有一个实例方法叫concatWith,这两者是等价的:Observable.concat(a,b)和a.concatWith(b)。
reduce操作符

  • reduce(Func2): 按顺序对Observable发射的每项数据应用一个函数并发射最终的值。 操作符对Observable发射数据的第一项应用到一个函数,然后再将返回的值与第二项数据一起传递给函数,以此类推,持续到最后一项数据并停止。并返回这个函数的最终值) 注意:如果原始Observable没有发射任何数据,reduce抛出异常IllegalArgumentException
  • reduce(seed, Func2):接受一个种子参数

连接操作

Replay

Replay的示例

  • 保证所有的观察者收到相同的数据序列,即使它们在Observable开始发射数据之后才订阅。 可连接的Observable(ConnectableObservable)与普通的Observable差不多,只不过它并不会在被订阅时开始发射数据,而是直接使用了Connect操作符时,才开始发射数据。
  • 变体replay(int)和replay(long, TimeUnit):指定replay的最大缓存量。

辅助操作

Delay的使用

延迟一段指定的时间再发射来自Observable的发射物。

  • delay(long, TimeUnit):Delay操作符让原始Observable在发射每项数据之前都暂停一段指定的时间段。效果是Observable发射的数据项 在时间上向前整体平移了一个增量。 (注意:delay不会平移onError通知,它会立即将这个通知传递给订阅者,同事丢弃任何发射onNext的通知。然而它会平移一个onCompleted通知)
TimeOut的使用
  • timeout(long, TimeUnit): 对原始Observable的一个镜像,如果过了一个指定的时长仍没有发射数据,它会发射一个错误通知。

About

RxJava的使用和MVP的demo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages