observable java_Observable基本用法(RxJava)
1.简介RxJava
一般我们进行耗时任务,如网络、数据库查询、复杂计算等等,我们都回开启一个线程,然后通过接口回调,获取我们的结果。 但随着我们业务逻辑的越来越复杂,我们就会陷入一个回调地狱,回调里面还有回调,在日后我们维护代码来说简直是噩梦。
RxJava的出现正式为了解决这个问题而生的,它支持链式调用!
关键字:异步、链式调用、观察者模式
这篇文章主要来记录Observable基本用法
2.create
final List list = Arrays.asList(new String[]
{"one","two","three"});
Observable observable = Observable.create(new
OnSubscribe>() {
@Override
public void call(Subscriber super
List> subscriber) {
subscriber.onNext(list);
subscriber.onCompleted();
}
});
1
2
3
4
5
6
7
8
9
10
11
12
可以发现,我们发射的是以整个List 我们可以发射一个一个对象吗?
当然可以:
Observable observable = Observable.create(new
OnSubscribe() {
@Override
public 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() {
@Override
public void onCompleted() {
System.out.println("onCompleted");
}
@Override
public void onError(Throwable arg0) {
}
@Override
public 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() {
@Override
public void onCompleted() {
System.out.println("onCompleted");
}
@Override
public void onError(Throwable arg0) {
}
@Override
public 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() {
@Override
public void onCompleted() {
System.out.println("onCompleted");
}
@Override
public void onError(Throwable arg0) {
}
@Override
public 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() {
@Override
public void onCompleted() {
System.out.println("onCompleted");
}
@Override
public void onError(Throwable arg0) {
}
@Override
public 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() {
@Override
public void onCompleted() {
System.out.println("onCompleted");
}
@Override
public void onError(Throwable arg0) {
}
@Override
public 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() {
@Override
public void onCompleted() {
// TODO Auto-generated method stub
}
@Override
public void onError(Throwable arg0) {
// TODO Auto-generated method stub
}
@Override
public 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秒发射一次
observable java_Observable基本用法(RxJava)相关推荐
- RxJava中Observable的基本用法
1.前言 随着RxJava越来越火,相信在2016年必定会大方异彩. 虽然前前后后看了不少RxJava的文章,但都没有积累下来,又没有在实际项目中使用过. 因此特意写下这篇文章记录学习过程. 1.简介 ...
- Android RxJava 基本用法
Android RxJava 基本用法 RxJava 使用函数响应式编程方式,它可以简化项目,处理嵌套回调的异步事件. RxJava 依赖 这里以 RxJava 2.2.1 为例.在 build.gr ...
- 合并RxJava的Observable数据流
本文讨论几种不同方式合并RxJava的Observable数据流. Observable介绍 Observable 序列,或简单称为Observable,表示异步数据流.这些概念遵循基于观察者模式,在 ...
- RxJava 从入门到全解析
前言 使用了RxJava有一段时间了,深深感受到了其"牛逼"之处.下面,就从RxJava的基础开始,一步一步与大家分享一下这个强大的异步库的用法! RxJava 概念初步 RxJa ...
- Retrofit2+Rxjava学习到封装
一. 为什么写这篇文章 RxJava和Retrofit也火了一段时间了,网上有很多RxJava与Retrofit的文章介绍,拜读一番之后,仍感觉这两个框架不接底气,对于初学者仍是丈二的和尚,不知所云, ...
- RxJava 基础的使用
学习地址: github wiki 学习地址 ReactiveX 操作符学习地址 RxJava是ReactiveX(反应性扩展)的Java VM实现:一个用于通过使用可观察的序列组成异步和基于事件的程 ...
- 用大白话讲解RxJava原理
近日外媒报道称,Google 其应用商店 Play Store 一次下架了超过 600 个违规 App:其中中国.印度以及新加坡为本次大规模下架 App 开发者前三的国家,来自中国的猎豹移动所开发的 ...
- 拥抱RxJava(番外篇):关于RxJava的Tips Tricks
前言: 起初写 拥抱RxJava 系列文章.只是因为看到很多人在使用RxJava时候,并没有很正确的理解Reactive Programming.仅仅在项目中使用了Retrofit的Rx Adapte ...
- 业务异常 java_谈谈RxJava处理业务异常的几种方式
此文介绍了RxJava处理业务异常的几种方式,分享给大伙.具体如下: 关于异常 Java的异常可以分为两种:运行时异常和检查性异常. 运行时异常: RuntimeException类及其子类都被称为运 ...
最新文章
- SpringBootMybatis 关于Mybatis-generator-gui的使用|数据库的编码注意点|各项复制模板...
- Swift中依赖注入的解耦策略
- 1.3 万亿条数据查询,知乎如何做到毫秒级响应?
- Hdu 4738 Caocao's Bridges (连通图+桥)
- 快速设置UITableView不同section对应于不同种类的cell
- 看完这篇 HTTPS,和面试官扯皮就没问题了
- Dispose() C# 优化内存
- Delphi10 安装Graphics32
- Js中的for in
- python launcher卸载后蓝屏_误卸载python2.4导致yum不能用后的修复
- JMeter性能测试工具简介
- java 随机生成图_java – 如何生成随机图?
- golang echo框架案例
- 手把手教你做做一份高质量投标书
- vivo android 刷机教程,vivo Xshot升级Android 4.4刷机教程
- Mac的反编译工具一:otool (objdump工具的OSX对应工具)。
- 后缀树 Suffix Tree
- 三角法激光雷达测距原理
- 安卓sdk开发!阿里面试100%会问到的JVM,架构师必备技能
- 企业微信中打开的小程序wx.qy.getEnterpriseUserInfo接口调用报错42013