RxJava的Single、Completable以及Maybe
RxJava的Single、Completable以及Maybe
参考:
https://www.jianshu.com/p/45309538ad94
https://www.heqiangfly.com/2017/10/18/open-source-rxjava-single-completable-maybe/
类型 | 描述 |
---|---|
Observable<T> | 能够发射0或n个数据,并以成功或错误事件终止。 |
Flowable<T> | 能够发射0或n个数据,并以成功或错误事件终止。 <br/>支持Backpressure,可以控制数据源发射的速度。 |
Single<T> | 只发射单个数据或错误事件。 |
Completable | 它从来不发射数据,只处理 onComplete 和 onError 事件。<br />可以看成是Rx的Runnable。 |
Maybe<T> | 能够发射0或者1个数据,要么成功,要么失败。有点类似于Optional |
我们常用的是Observable和Flowable,最常用的是Observable,今天我就看一下Single、Completable以及Maybe的用法。
Single
Single的SingleObserver中只有onSuccess、onError,并没有onComplete。这是 Single 跟其他四种被观察者最大的区别。其他的它的使用和Observable差不多
Single.create(new SingleOnSubscribe<String>() { @Override public void subscribe(@NonNull SingleEmitter<String> e) throws Exception { e.onSuccess("test"); } }).subscribe(new Consumer<String>() { @Override public void accept(@NonNull String s) throws Exception { System.out.println(s); } }, new Consumer<Throwable>() { @Override public void accept(@NonNull Throwable throwable) throws Exception { throwable.printStackTrace(); } });
Completable
Completable在创建后,不会发射任何数据。Completable 只有 onComplete 和 onError 事件,同时 Completable 并没有map、flatMap等操作符,它的操作符比起 Observable/Flowable 要少得多。
Completable.create(new CompletableOnSubscribe() { @Override public void subscribe(@NonNull CompletableEmitter e) throws Exception { e.onComplete(); //e.onError(new Throwable("Error")); } }).subscribeOn(AndroidSchedulers.mainThread()) .observeOn(Schedulers.io()) .subscribe(new CompletableObserver() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onComplete() { Log.e("Test", "onComplete"); } @Override public void onError(@NonNull Throwable e) { Log.e("Test", "onError"+e.toString()); } });
Maybe
Maybe 是 RxJava2.x 之后才有的新类型,可以看成是Single和Completable的结合。
Maybe创建之后,MaybeEmitter 和 SingleEmitter 一样并没有onNext()方法,同样需要通过onSuccess()方法来发射数据。
Maybe.create(new MaybeOnSubscribe<String>(){ @Override public void subscribe(@NonNull MaybeEmitter<String> e) throws Exception { e.onSuccess("onSuccess"); //e.onError(new Throwable("Error")); //e.onComplete(); } }).subscribeOn(AndroidSchedulers.mainThread()) .observeOn(Schedulers.io()) .subscribe(new MaybeObserver<String>() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onSuccess(@NonNull String s) { Log.e("Test","onSuccess"); } @Override public void onError(@NonNull Throwable e) { Log.e("Test","onError"); } @Override public void onComplete() { Log.e("Test","onComplete"); } });
RxJava的Single、Completable以及Maybe相关推荐
- 在Android中运用RxJava
1.RxJava 2.0 1.1.什么是RxJava和响应式编程(reactive programming) 在响应编程中,消费者对数据进行反应,这就是为什么异步编程也被称为响应式编程的原因. 响应式 ...
- JAVA RxJava 2.x
[JAVA RxJava 2.x] 为什么要学 RxJava? RxJava 最大的优点也是简洁,但它不止是简洁,而且是* 随着程序逻辑变得越来越复杂,它依然能够保持简洁 *. 咳咳,要例子,猛戳这里 ...
- 使用Spring Boot和RxJava的构建响应式REST API
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 我不打算解释什么是响应式编程,也不解释为什么要使用它.我希望你已经在其他地方了解过,如果没有 ...
- java singleresult方法_RxJava 第一篇 - Single使用及示例
本文开始介绍RxJava的使用,和别的RxJava文章不同的地方在于我们直接从实战开始介绍,不讲那么多的花拳绣腿.好多RxJava启蒙文章都是你抄我我抄你,抄来抄去也就那么几个场景,换到自己的项目中还 ...
- java single_RxJava 第一篇 - Single使用及示例
本文开始介绍RxJava的使用,和别的RxJava文章不同的地方在于我们直接从实战开始介绍,不讲那么多的花拳绣腿.好多RxJava启蒙文章都是你抄我我抄你,抄来抄去也就那么几个场景,换到自己的项目中还 ...
- Reactor实例解析
\ 要点 \\ Reactor是一个运行在Java8之上的响应式流框架,它提供了一组响应式风格的API\\t 除了个别API上的区别,它的原理跟RxJava很相似\\t 它是第四代响应式框架,支持操作 ...
- RxLifecycle详细解析
一.介绍 RxLifecycle目的:解决RxJava使用中的内存泄漏问题. 例如,当使用RxJava订阅并执行耗时任务后,当Activity被finish时,如果耗时任务还未完成,没有及时取消订阅, ...
- redis lettuce_Redis Client Lettuce 5 GA发布
redis lettuce 经过13个月的开发阶段和208张已解决的故障单,我很高兴宣布Lettuce 5.0全面上市. 这是一个主要发行版,带有一些重大更改,新的有趣功能以及Java 9兼容性. 从 ...
- Redis Client Lettuce 5 GA发布
经过13个月的开发阶段和208张已解决的故障单,我很高兴宣布Lettuce 5.0全面上市. 这是一个主要发行版,带有一些重大更改,新的有趣功能以及Java 9兼容性. 从Maven Central获 ...
最新文章
- Zookeeper的节点操作
- 64位userdata.dll丢失_有什么一劳永逸解决私钥丢失的方法吗?
- 与熊论道为什么解码不了_楼上熊孩子瞎蹦跳,楼下邻居投诉无果,一招吓哭“熊一家”...
- WPF ----在UserControl的xaml里绑定依赖属性
- bootstraptable列宽自适应内容_多列列表框行高和列宽的自适应调整
- vue.js环境部署
- linux c 笔记-1
- exce小技巧,Mac Excel单元格内换行快捷键
- java clob 操作_java操作clob字段
- 把14亿中国人都拉到一个微信群在技术上能实现吗?
- 雅虎邮箱 转发设置_如何在Yahoo Mail中设置外出答复
- 变速器 美国sram速联和日本shimano洗马路对比
- STM32H7 DMA USART空闲中断接收不定长数据
- Centos 7安装tig报错:include/tig/tig.h:83:31: fatal error: ncursesw/curses.h: No such file or directory
- 城市大脑与超级智能城市建设规范研究
- 文科生学计算机有前途吗,文科生学习计算机有难度吗?计算机的前景如何?
- python判断用户输入的数是正数还是负数
- Java中的集合父亲之collection使用和遍历方式--(单列集合顶级接口)
- Tableau 错误代码: 6EA18A9E,导入自定义地理时发生意外错误,无法完成操作
- 新浪微博OAuth认证和存储