4章 RxJava基本响应类型
CSDN学院课程地址
- RxJava2从入门到精通-初级篇:https://edu.csdn.net/course/detail/10036
- RxJava2从入门到精通-中级篇:https://edu.csdn.net/course/detail/10037
- RxJava2从入门到精通-进阶篇:https://edu.csdn.net/course/detail/10038
- RxJava2从入门到精通-源码分析篇:https://edu.csdn.net/course/detail/10138
4. RxJava基本响应类型
4.1 Observable
Observable是最基本的响应类型,但不支持背压,基本上适用大多数的应用场景
有关背压的概念等,都会在下一章介绍
public static void observable() {//创建被观察者Observable.create(new ObservableOnSubscribe<String>() {@Override//默认在主线程里执行该方法public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {e.onNext("俊俊俊很帅");e.onNext("你值得拥有");e.onNext("取消关注");e.onNext("但还是要保持微笑");e.onComplete();}})//将被观察者切换到子线程.subscribeOn(Schedulers.io())//将观察者切换到主线程 需要在Android环境下运行//.observeOn(AndroidSchedulers.mainThread())//创建观察者并订阅.subscribe(new Observer<String>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onNext(String s) {System.out.println("onNext=" + s);}@Overridepublic void onError(Throwable e) {System.out.println("onError=" + e.getMessage());}@Overridepublic void onComplete() {System.out.println("onComplete");}});
}
输出
onNext=俊俊俊很帅
onNext=你值得拥有
onNext=取消关注
onNext=但还是要保持微笑
onComplete
4.2 Flowable
Flowable和Observable的使用基本相同,只不过Observable不支持背压,而Flowable支持背压。但需要注意的是,使用Flowable的时候,必须调用Subscription的requsest方法请求,不然上游是不会发射数据的
public static void flowable() {//创建被观察者Flowable.create(new FlowableOnSubscribe<String>() {@Overridepublic void subscribe(FlowableEmitter<String> e) throws Exception {e.onNext("俊俊俊很帅");e.onNext("你值得拥有");e.onNext("取消关注");e.onNext("但还是要保持微笑");e.onComplete();}}, BackpressureStrategy.DROP)//将被观察者切换到子线程.subscribeOn(Schedulers.io())//将观察者切换到主线程 需要在Android环境下运行//.observeOn(AndroidSchedulers.mainThread())//创建观察者并订阅.subscribe(new Subscriber<String>() {@Overridepublic void onSubscribe(Subscription s) {s.request(2);}@Overridepublic void onNext(String s) {System.out.println("onNext=" + s);}@Overridepublic void onError(Throwable t) {System.out.println("onError=" + t.getMessage());}@Overridepublic void onComplete() {System.out.println("onComplete");}});
}
输出
onNext=俊俊俊很帅
onNext=你值得拥有
4.3 Single
Single只发射一个元素,发射onSuccess
或onError
方法,所以没有complete方法,不像Observable或者Flowable,数据发射完成之后,需要调用complete告诉下游已经完成
public static void single() {//创建被观察者Single.create(new SingleOnSubscribe<String>() {@Overridepublic void subscribe(SingleEmitter<String> e) throws Exception {e.onSuccess("success");}})//将被观察者切换到子线程.subscribeOn(Schedulers.io())//将观察者切换到主线程 需要在Android环境下运行//.observeOn(AndroidSchedulers.mainThread())//创建观察者并订阅.subscribe(new SingleObserver<String>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onSuccess(String s) {System.out.println("onSuccess=" + s);}@Overridepublic void onError(Throwable e) {System.out.println("onError=" + e.getMessage());}});
}
输出
onSuccess=success
4.4 Completable
Completable不会发射数据,只会给下游发送一个信号。回调onComplete
或onError
方法
public static void completable() {//创建被观察者Completable.create(new CompletableOnSubscribe() {@Overridepublic void subscribe(CompletableEmitter e) throws Exception {e.onComplete();}})//将被观察者切换到子线程.subscribeOn(Schedulers.io())//将观察者切换到主线程 需要在Android环境下运行//.observeOn(AndroidSchedulers.mainThread())//创建观察者并订阅.subscribe(new CompletableObserver() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onComplete() {System.out.println("onComplete");}@Overridepublic void onError(Throwable e) {System.out.println("onError=" + e.getMessage());}});
}
输出
onComplete
4.5 Maybe
Maybe是Single和Completable的结合,需要注意的是onSuccess和onComplete方法只会执行其中一个,这不同于Observable和Flowable最后是以onComplete()结尾
public static void maybe() {//创建被观察者Maybe.create(new MaybeOnSubscribe<String>() {@Overridepublic void subscribe(MaybeEmitter<String> e) throws Exception {e.onSuccess("success");e.onComplete();}})//将被观察者切换到子线程.subscribeOn(Schedulers.io())//将观察者切换到主线程 需要在Android环境下运行//.observeOn(AndroidSchedulers.mainThread())//创建观察者并订阅.subscribe(new MaybeObserver<String>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onSuccess(String s) {System.out.println("onSuccess=" + s);}@Overridepublic void onError(Throwable e) {System.out.println("onError=" + e.getMessage());}@Overridepublic void onComplete() {System.out.println("onComplete");}});
}
输出
onSuccess=success
4.6 小结
- Observable:最基本的响应类型,不支持背压
- Flowable:最基本的响应类型,支持背压
- Single:只发射一个数据的响应类型
- Completable:只发射一个信号的响应类型
- Maybe:Single和Completable的结合体
4章 RxJava基本响应类型相关推荐
- 第一章 Thinking Reactively(响应式的思考)
第一章 Thinking Reactively(响应式的思考) 假定您相当熟悉Java并且知道如何使用类,接口,方法,属性,变量,静态/非静态作用域和集合. 如果您还没有完成并发或多线程,那就可以了. ...
- 信安教程第二版-第17章网络安全应急响应技术原理与应用
第17章 网络安全应急响应技术原理与应用 17.1 网络安全应急响应概述 353 17.1.1 网络安全应急响应概念 353 17.1.2 网络安全应急响应发展 353 17.1.3 网络安全应急响应 ...
- Nodejs中搭建一个静态Web服务器,通过读取文件获取响应类型
场景 Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件让全世界浏览,还可以放置数据文件,让全世界下载.目前最主流的Web服务 ...
- 406(浏览器接收的响应类型和服务器返回的响应类型不匹配)
也就是说,浏览器所接收的数据格式与服务器响应的数据格式是不匹配的. 浏览器接收的数据格式一般可以是任意格式,但是我们在发起Ajax请求时就已经确定了要接收的是Jsonp格式 响应的数据类型定义在的co ...
- springmvc全局异常处理ControllerAdvice区分返回响应类型是页面还是JSON
springmvc全局异常处理ControllerAdvice区分返回响应类型是页面还是JSON 参考文章: (1)springmvc全局异常处理ControllerAdvice区分返回响应类型是页面 ...
- C++Primer读书笔记----第二章变量和基本类型
前段时间学习iphone开发,非常力不从心,很多C/C++的类库代码看不明白.大学的时候都学过C/C++,但是基本上忘光了,现在做C#开发,经常写出来一些性能低下的代码,究其原因就是原理掌握不扎实,乱 ...
- excel文件导出、下载的响应类型设置
excel文件下载(模板下载)或者导出excel文件时请求接口需要设置响应类型responseType:'blob' 例如: // excel模板文件下载 export function downlo ...
- Android【Retrofit(HTTP客户端),RxJAVA(响应式编程)】
1 Retrofit(HTTP客户端) 1.1 简介 我们项目当中的每个app都需要用到网络和服务器进行交互,在Android项目开发中使用HTTP协议完成通信的话,基本上都要用到OkHttp或者Re ...
- 《C++Primer》第二章-变量和基本类型-学习笔记(1)
<C++Primer>第二章-变量和基本类型-学习笔记(1) 文章目录 <C++Primer>第二章-变量和基本类型-学习笔记(1) 摘要 主体 基本(内置)类型 算数类型 整 ...
最新文章
- poj2186(强连通分量)
- pytorch用win还是Linux,如何在Windows系统安装使用机器学习库PyTorch
- 华为OJ平台——放苹果(典型整数划分问题)
- 股票实例_注意了!手中的股票涨停,但是却封不住反复打开,说明了什么?看懂持股不慌...
- oracle_home path,ORACLE_HOME迁移后需要设置LD_LIBRARY_PATH环境变量
- Javaweb MVC设计模式、Modle发展史、项目分层和三层架构
- hdu1426 Sudoku Killer dfs
- python画玫瑰曲线_「风向玫瑰图」python绘制风向玫瑰图和污染物玫瑰图 - seo实验室...
- Java集成DataX
- 木马可以损坏计算机硬件么,台式电脑总是自动重启怎么处理
- [原创]windows server 2012 AD架构 试验 系列 – 17管理用户AD帐号
- OpenFeign 简单使用
- 搬了新家,转让一批书。
- Electron屏幕截图的技术方案MacWindows
- 怎么用matlab保存音频文件,Matlab用图片和音频藏文件(续)
- hdu 5148 Cities(树形dp)
- 美元指数K线图怎么看?
- STM32 HAL库学习笔记1-HAL库简介
- pdf中矢量图提取出来,插入visio 或者 word,保持矢量图特性,十分清晰;
- VMware Fusion设置静态IP+端口转发(macOS)+内网穿透