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只发射一个元素,发射onSuccessonError方法,所以没有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不会发射数据,只会给下游发送一个信号。回调onCompleteonError方法

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 小结

  1. Observable:最基本的响应类型,不支持背压
  2. Flowable:最基本的响应类型,支持背压
  3. Single:只发射一个数据的响应类型
  4. Completable:只发射一个信号的响应类型
  5. Maybe:Single和Completable的结合体

4章 RxJava基本响应类型相关推荐

  1. 第一章 Thinking Reactively(响应式的思考)

    第一章 Thinking Reactively(响应式的思考) 假定您相当熟悉Java并且知道如何使用类,接口,方法,属性,变量,静态/非静态作用域和集合. 如果您还没有完成并发或多线程,那就可以了. ...

  2. 信安教程第二版-第17章网络安全应急响应技术原理与应用

    第17章 网络安全应急响应技术原理与应用 17.1 网络安全应急响应概述 353 17.1.1 网络安全应急响应概念 353 17.1.2 网络安全应急响应发展 353 17.1.3 网络安全应急响应 ...

  3. Nodejs中搭建一个静态Web服务器,通过读取文件获取响应类型

    场景 Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件让全世界浏览,还可以放置数据文件,让全世界下载.目前最主流的Web服务 ...

  4. 406(浏览器接收的响应类型和服务器返回的响应类型不匹配)

    也就是说,浏览器所接收的数据格式与服务器响应的数据格式是不匹配的. 浏览器接收的数据格式一般可以是任意格式,但是我们在发起Ajax请求时就已经确定了要接收的是Jsonp格式 响应的数据类型定义在的co ...

  5. springmvc全局异常处理ControllerAdvice区分返回响应类型是页面还是JSON

    springmvc全局异常处理ControllerAdvice区分返回响应类型是页面还是JSON 参考文章: (1)springmvc全局异常处理ControllerAdvice区分返回响应类型是页面 ...

  6. C++Primer读书笔记----第二章变量和基本类型

    前段时间学习iphone开发,非常力不从心,很多C/C++的类库代码看不明白.大学的时候都学过C/C++,但是基本上忘光了,现在做C#开发,经常写出来一些性能低下的代码,究其原因就是原理掌握不扎实,乱 ...

  7. excel文件导出、下载的响应类型设置

    excel文件下载(模板下载)或者导出excel文件时请求接口需要设置响应类型responseType:'blob' 例如: // excel模板文件下载 export function downlo ...

  8. Android【Retrofit(HTTP客户端),RxJAVA(响应式编程)】

    1 Retrofit(HTTP客户端) 1.1 简介 我们项目当中的每个app都需要用到网络和服务器进行交互,在Android项目开发中使用HTTP协议完成通信的话,基本上都要用到OkHttp或者Re ...

  9. 《C++Primer》第二章-变量和基本类型-学习笔记(1)

    <C++Primer>第二章-变量和基本类型-学习笔记(1) 文章目录 <C++Primer>第二章-变量和基本类型-学习笔记(1) 摘要 主体 基本(内置)类型 算数类型 整 ...

最新文章

  1. poj2186(强连通分量)
  2. pytorch用win还是Linux,如何在Windows系统安装使用机器学习库PyTorch
  3. 华为OJ平台——放苹果(典型整数划分问题)
  4. 股票实例_注意了!手中的股票涨停,但是却封不住反复打开,说明了什么?看懂持股不慌...
  5. oracle_home path,ORACLE_HOME迁移后需要设置LD_LIBRARY_PATH环境变量
  6. Javaweb MVC设计模式、Modle发展史、项目分层和三层架构
  7. hdu1426 Sudoku Killer dfs
  8. python画玫瑰曲线_「风向玫瑰图」python绘制风向玫瑰图和污染物玫瑰图 - seo实验室...
  9. Java集成DataX
  10. 木马可以损坏计算机硬件么,台式电脑总是自动重启怎么处理
  11. [原创]windows server 2012 AD架构 试验 系列 – 17管理用户AD帐号
  12. OpenFeign 简单使用
  13. 搬了新家,转让一批书。
  14. Electron屏幕截图的技术方案MacWindows
  15. 怎么用matlab保存音频文件,Matlab用图片和音频藏文件(续)
  16. hdu 5148 Cities(树形dp)
  17. 美元指数K线图怎么看?
  18. STM32 HAL库学习笔记1-HAL库简介
  19. pdf中矢量图提取出来,插入visio 或者 word,保持矢量图特性,十分清晰;
  20. VMware Fusion设置静态IP+端口转发(macOS)+内网穿透

热门文章

  1. 二次规划(1):Lagrange法
  2. 端午节假期----心情记录
  3. FleaPHP 开发指南 - 5. 应用程序设置
  4. sql server 全文检索 使用
  5. LDK3读书笔记(第二章:从内核出发)
  6. Nasdaq股票代码表 zt
  7. 电脑怎么直接给服务器传文件夹,教你电脑怎么传文件夹给qq好友
  8. 函数空间一览:从线性空间到再生核希尔伯特空间
  9. 集散控制系统是集计算机技术,集散控制系统概述
  10. 软件开发+推广引流,最适合企业商家的软件营销模式