Observable基本用法(RxJava)
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)相关推荐
- observable java_Observable基本用法(RxJava)
1.简介RxJava 一般我们进行耗时任务,如网络.数据库查询.复杂计算等等,我们都回开启一个线程,然后通过接口回调,获取我们的结果. 但随着我们业务逻辑的越来越复杂,我们就会陷入一个回调地狱,回调里 ...
- RxJava中Observable的基本用法
1.前言 随着RxJava越来越火,相信在2016年必定会大方异彩. 虽然前前后后看了不少RxJava的文章,但都没有积累下来,又没有在实际项目中使用过. 因此特意写下这篇文章记录学习过程. 1.简介 ...
- Android RxJava 基本用法
Android RxJava 基本用法 RxJava 使用函数响应式编程方式,它可以简化项目,处理嵌套回调的异步事件. RxJava 依赖 这里以 RxJava 2.2.1 为例.在 build.gr ...
- 一起来造一个RxJava,揭秘RxJava的实现原理
RxJava是一个神奇的框架,用法很简单,但内部实现有点复杂,代码逻辑有点绕.我读源码时,确实有点似懂非懂的感觉.网上关于RxJava源码分析的文章,源码贴了一大堆,代码逻辑绕来绕去的,让人看得云里雾 ...
- retrofit与rxjava使用
retrofit和rxjava(加深) http://www.jianshu.com/p/64af68c5638c Android Retrofit + RxJava使用详解(基础) http://w ...
- Retrofit2+Rxjava学习到封装
一. 为什么写这篇文章 RxJava和Retrofit也火了一段时间了,网上有很多RxJava与Retrofit的文章介绍,拜读一番之后,仍感觉这两个框架不接底气,对于初学者仍是丈二的和尚,不知所云, ...
- 一篇RxJava友好的文章(一)
转载请标明出处: http://blog.csdn.net/forezp/article/details/52886700 本文出自方志朋的博客 Rxjava在目前的开发中已经是如火如荼,非常的流行, ...
- android retrofit2.0 rxjava2,Android - 网络请求之 Retrofit2 + RxJava
老婆保佑,代码无BUG 目录 引用 与其他开源请求库对比 Retrofit注解 使用 GET请求 POST请求 Retrofit2 + RxJava 基础使用 优化 封装Retrofit2 + RxJ ...
- 数据结构链表例程_如何掌握RxJava例程的四个结构
数据结构链表例程 by Ayusch Jain 通过Ayusch Jain 如何掌握RxJava例程的四个结构 (How to get a grip on the four constructs of ...
最新文章
- NAR:扩增子OTU聚类软件SeekDeep方法解读
- python 自定义模块怎么用_python自定义模块使用说明
- webpack+vue+mint-ui 实现上拉加载更多(Loadmore组件)
- JZOJ 1322. 硬币游戏
- android 实现打开相册
- 利用.dSYM和.app文件准确定位Crash位置
- BUAA 436 孟竹的复习计划(二维树状数组)
- 生信学习学的是什么?常识!
- ibatis3获得总记录数,同时计算数据分页?
- linux使用running网卡ping,Linux CentOS 7 IP地址配置及网络问题排查
- 数据可视:让科幻走向现实
- [渝粤教育] 江西财经大学 税法 参考 资料
- 昆仑通态复制的程序可以用吗_第478期丨相同功能带定时器的PLC程序怎么简化?非标设备出口到日本,应该怎么配电。...
- 硬件加速 | 基于FPGA的深度学习CNN加速器设计(论文复现)
- 黑色炫酷粒子html网站源码
- Bomb Game(题目地址链接:https://acs.jxnu.edu.cn/problem/NOIOPJCH02011661)
- 品牌软文营销借助故事的力量打动用户
- iOSapp的json告示
- 《机器学习实战》——第3章 决策树
- Java编程实现快速傅里叶变换FFT