1.前言
随着RxJava越来越火,相信在2016年必定会大方异彩。 虽然前前后后看了不少RxJava的文章,但都没有积累下来,又没有在实际项目中使用过。

因此特意写下这篇文章记录学习过程。

1.简介RxJava
一般我们进行耗时任务,如网络、数据库查询、复杂计算等等,我们都回开启一个线程,然后通过接口回调,获取我们的结果。 但随着我们业务逻辑的越来越复杂,我们就会陷入一个回调地狱,回调里面还有回调,在日后我们维护代码来说简直是噩梦。

RxJava的出现正式为了解决这个问题而生的,它支持链式调用!

关键字:异步、链式调用、观察者模式

这篇文章主要来记录Observable基本用法

2.create

final List<String> list = Arrays.asList(new String[]    {"one","two","three"});Observable observable = Observable.create(new OnSubscribe<List<String>>() {@Overridepublic void call(Subscriber<? super List<String>> subscriber) {subscriber.onNext(list);subscriber.onCompleted();}});

可以发现,我们发射的是以整个List<String> 我们可以发射一个一个对象吗?

当然可以:

        Observable observable = Observable.create(new OnSubscribe<String>() {@Overridepublic void call(Subscriber<? super String> subscriber) {for (String str:list) {subscriber.onNext(str);}subscriber.onCompleted();}});

这样看起来好像还不是很优雅!有没有办法刚优雅呢? 那我们来看看from这个方法

3.from

Observable.from(list).subscribe(new Observer<String>() {@Overridepublic void onCompleted() {System.out.println("onCompleted");}@Overridepublic void onError(Throwable arg0) {}@Overridepublic void onNext(String string) {System.out.println(string);}});

结果是:

one
two
three
onCompleted

符合我们的预期!

4.just
如果我只想发射list中的第二和第三位可以吗?

当然可以,我们可以借助just方法:

        Observable.just(list.get(1), list.get(2)).subscribe(new Observer<String>() {@Overridepublic void onCompleted() {System.out.println("onCompleted");}@Overridepublic void onError(Throwable arg0) {}@Overridepublic void onNext(String string) {System.out.println(string);}});

结果:

two
three
onCompleted

符合我们的预期!

备注:just方法可以接受1-10个参数

5.repeat

如果我们想将整个list重复发射两次或者三次呢?

Observable.from(list).repeat(2).subscribe(new Observer<String>() {@Overridepublic void onCompleted() {System.out.println("onCompleted");}@Overridepublic void onError(Throwable arg0) {}@Overridepublic void onNext(String string) {System.out.println(string);}});

结果:

one
two
three
one
two
three
onCompleted

符合我们预期

备注:repeat可以不传参,效果是:无限循环

6.range

从X按顺序输出Y位数字?

Observable.range(88,10).subscribe(new Observer<Integer>() {@Overridepublic void onCompleted() {System.out.println("onCompleted");}@Overridepublic void onError(Throwable arg0) {}@Overridepublic void onNext(Integer arg0) {System.out.println(arg0+"");}});

88
89
90
91
92
93
94
95
96
97
onCompleted

7.interval(测试失败)

间隔时间发射:

        Observable.interval(3, TimeUnit.SECONDS).subscribe(new Subscriber<Long>() {@Overridepublic void onCompleted() {System.out.println("onCompleted");}@Overridepublic void onError(Throwable arg0) {}@Overridepublic void onNext(Long arg0) {System.out.println(arg0+"");}});

很奇怪,这个方法并没有起作用。

8.timer(测试失败)

延迟发射:

Observable.timer(1, TimeUnit.SECONDS).subscribe(new Observer<Long>() {@Overridepublic void onCompleted() {// TODO Auto-generated method stub}@Overridepublic void onError(Throwable arg0) {// TODO Auto-generated method stub}@Overridepublic void onNext(Long arg0) {System.out.println(arg0+"");}});

这个方法和interval一样,也是不能测试。

它还有一个三个参数的方法timer(3,3,TimeUnit.SECONDS) 延迟3秒之后,每隔3秒发射一次

————————————————
版权声明:本文为CSDN博主「AlpHans」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_18402085/article/details/50625886

RxJava中Observable的基本用法相关推荐

  1. observable android,RxAndroid中observable的基本使用和表单校验操作

    RxAndroid 响应式编程 类似于监听-观察者模式 在观察者模式中,你的对象需要实现 RxJava 中的两个关键接口:Observable 和 Observer.当 Observable 的状态改 ...

  2. 如何形象地描述 RxJava 中的背压和流控机制?

    之前我在知乎上受邀回答过一个关于RxJava背压(Backpressure)机制的问题,今天我把它整理出来,希望对更多的人能有帮助. RxJava的官方文档中对于背压(Backpressure)机制比 ...

  3. 深入Java泛型(四):RxJava中泛型的使用分析

    RxJava出现在我们的视线已经很久了,我自己也有阅读过非常多的文章,谈不上精通,但是勉强称得上会一些简单的使用,近日总是对这种响应式的编程,对RxJava魂牵梦绕,深刻的感觉到自己对泛型的认识,理解 ...

  4. MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法

    说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都在它的源码 ...

  5. rxjava背压_如何形象地描述RxJava中的背压和流控机制?

    之前我在知乎上受邀回答过一个关于RxJava背压(Backpressure)机制的问题,今天我把它整理出来,希望对更多的人能有帮助. RxJava的官方文档中对于背压(Backpressure)机制比 ...

  6. RxJava中常见的几种Subject

    RxJava是什么? 原文是这样描述的: RxJava is a Java VM implementation of Reactive Extensions: a library for compos ...

  7. [译] RxJava 中的错误处理

    本文讲的是[译] RxJava 中的错误处理, 原文地址:Error handling in RxJava 原文作者:Dmitry Ryadnenko 译文出自:掘金翻译计划 本文永久链接:githu ...

  8. 合并RxJava的Observable数据流

    本文讨论几种不同方式合并RxJava的Observable数据流. Observable介绍 Observable 序列,或简单称为Observable,表示异步数据流.这些概念遵循基于观察者模式,在 ...

  9. PHP中魔术方法的用法

    PHP中魔术方法的用法 /** PHP把所有以__(两个下划线)开头的类方法当成魔术方法.所以你定义自己的类方法时,不要以 __为前缀. * */// __toString.__set.__get__ ...

最新文章

  1. SAP Basis DEBUG改表数据权限角色设计
  2. 使用 Python 切割图片
  3. hdu 1054 Strategic Game 最小点覆盖 = 最大二分匹配
  4. rpm deb命令集合
  5. Spring Security(09)——Filter
  6. 现代通信原理9.2:数字基带传输系统模型
  7. .net快速开发平台,learun敏捷开发框架
  8. 收藏!这37个自学网站,一年让你省下十几万
  9. docker安装nagios监控
  10. 计算机培训日志范文30篇,班主任工作日志20篇.docx
  11. 1-3 Grammar
  12. 内容分发网络(CDN)
  13. 三维可视化常见的技术路线浅析
  14. python微信发送消息过于频繁_微信发送信息频率上限?
  15. android——databinding中字符串的拼接处理、TextView显示的值随activity的属性值改变同时改变--LiveData、双向绑定过滤器、监听某个值的改变
  16. 3500字干货 | 大家都在谈的数据思维,到底要怎么建立?
  17. matlab中如何转动三维图_MATLAB小技巧之:绕任意空间轴旋转三维图形
  18. 2023年音视频开发前景如何?音视频开发需要掌握哪些技术?
  19. Linux apr的安装
  20. 嵌入式学习记录(1)——四足蜘蛛机器人

热门文章

  1. aja如何解决跨域请求?
  2. 为行业变革注入新动能,行易道入选“高工智能汽车智驾榜单”
  3. 用js写卡牌游戏(六)
  4. 软文 “垂死项目”复活记
  5. 创业者复盘长文:心有菩提手有刀,欲成舍利却成妖
  6. 35岁程序员:熬夜整理小米Android面试题,系列教学
  7. 【商城应用】用户余额体系设计
  8. 排队买iPhone11的,只有20个人了,多数是买暗夜绿
  9. 楼宇对讲赶上智慧城市热潮 或迎来行业春天
  10. ios 游戏《魂斗罗》 AL文件素材破解