2019独角兽企业重金招聘Python工程师标准>>>

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();}});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

可以发现,我们发射的是以整个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();}});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这样看起来好像还不是很优雅!有没有办法刚优雅呢? 那我们来看看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);}});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

结果是:

one
two
three
onCompleted
  • 1
  • 2
  • 3
  • 4
  • 5

符合我们的预期!

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);}});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

结果:

two
three
onCompleted
  • 1
  • 2
  • 3
  • 4

符合我们的预期!

备注: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);}});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

结果:

one
two
three
one
two
three
onCompleted
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

符合我们预期

备注: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+"");}});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
88
89
90
91
92
93
94
95
96
97
onCompleted
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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+"");}});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

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

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+"");}});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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

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

转载于:https://my.oschina.net/carbenson/blog/901785

Observable基本用法(RxJava)相关推荐

  1. observable java_Observable基本用法(RxJava)

    1.简介RxJava 一般我们进行耗时任务,如网络.数据库查询.复杂计算等等,我们都回开启一个线程,然后通过接口回调,获取我们的结果. 但随着我们业务逻辑的越来越复杂,我们就会陷入一个回调地狱,回调里 ...

  2. RxJava中Observable的基本用法

    1.前言 随着RxJava越来越火,相信在2016年必定会大方异彩. 虽然前前后后看了不少RxJava的文章,但都没有积累下来,又没有在实际项目中使用过. 因此特意写下这篇文章记录学习过程. 1.简介 ...

  3. Android RxJava 基本用法

    Android RxJava 基本用法 RxJava 使用函数响应式编程方式,它可以简化项目,处理嵌套回调的异步事件. RxJava 依赖 这里以 RxJava 2.2.1 为例.在 build.gr ...

  4. 一起来造一个RxJava,揭秘RxJava的实现原理

    RxJava是一个神奇的框架,用法很简单,但内部实现有点复杂,代码逻辑有点绕.我读源码时,确实有点似懂非懂的感觉.网上关于RxJava源码分析的文章,源码贴了一大堆,代码逻辑绕来绕去的,让人看得云里雾 ...

  5. retrofit与rxjava使用

    retrofit和rxjava(加深) http://www.jianshu.com/p/64af68c5638c Android Retrofit + RxJava使用详解(基础) http://w ...

  6. Retrofit2+Rxjava学习到封装

    一. 为什么写这篇文章 RxJava和Retrofit也火了一段时间了,网上有很多RxJava与Retrofit的文章介绍,拜读一番之后,仍感觉这两个框架不接底气,对于初学者仍是丈二的和尚,不知所云, ...

  7. 一篇RxJava友好的文章(一)

    转载请标明出处: http://blog.csdn.net/forezp/article/details/52886700 本文出自方志朋的博客 Rxjava在目前的开发中已经是如火如荼,非常的流行, ...

  8. android retrofit2.0 rxjava2,Android - 网络请求之 Retrofit2 + RxJava

    老婆保佑,代码无BUG 目录 引用 与其他开源请求库对比 Retrofit注解 使用 GET请求 POST请求 Retrofit2 + RxJava 基础使用 优化 封装Retrofit2 + RxJ ...

  9. 数据结构链表例程_如何掌握RxJava例程的四个结构

    数据结构链表例程 by Ayusch Jain 通过Ayusch Jain 如何掌握RxJava例程的四个结构 (How to get a grip on the four constructs of ...

最新文章

  1. NAR:扩增子OTU聚类软件SeekDeep方法解读
  2. python 自定义模块怎么用_python自定义模块使用说明
  3. webpack+vue+mint-ui 实现上拉加载更多(Loadmore组件)
  4. JZOJ 1322. 硬币游戏
  5. android 实现打开相册
  6. 利用.dSYM和.app文件准确定位Crash位置
  7. BUAA 436 孟竹的复习计划(二维树状数组)
  8. 生信学习学的是什么?常识!
  9. ibatis3获得总记录数,同时计算数据分页?
  10. linux使用running网卡ping,Linux CentOS 7 IP地址配置及网络问题排查
  11. 数据可视:让科幻走向现实
  12. [渝粤教育] 江西财经大学 税法 参考 资料
  13. 昆仑通态复制的程序可以用吗_第478期丨相同功能带定时器的PLC程序怎么简化?非标设备出口到日本,应该怎么配电。...
  14. 硬件加速 | 基于FPGA的深度学习CNN加速器设计(论文复现)
  15. 黑色炫酷粒子html网站源码
  16. Bomb Game(题目地址链接:https://acs.jxnu.edu.cn/problem/NOIOPJCH02011661)
  17. 品牌软文营销借助故事的力量打动用户
  18. iOSapp的json告示
  19. 《机器学习实战》——第3章 决策树
  20. Java编程实现快速傅里叶变换FFT

热门文章

  1. 网络安全漏洞复现与分析
  2. IDEA实现序列号接口
  3. web页面通过a标签跳转QQ客服
  4. 木瓜移动SaaS平台:木瓜大橙白皮书 Part1 - 智能客服功能介绍
  5. 《理财最重要的事》精髓:理财过程中,哪些情绪误区导致我们的理想和现实之间产生差距?我们又该如何量身定制自己的理财规划?
  6. php微信公众号红包开发,php微信公众号开发之现金红包
  7. 用数据分析大家最喜欢什么类型的抖音视频
  8. weex 选择器 weex picker weex-x-picker
  9. HDU 2535 Vote
  10. 联通战术调整:沃3G弃iPhone转道Android