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)相关推荐

  1. RxJava中Observable的基本用法

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

  2. Android RxJava 基本用法

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

  3. 合并RxJava的Observable数据流

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

  4. RxJava 从入门到全解析

    前言 使用了RxJava有一段时间了,深深感受到了其"牛逼"之处.下面,就从RxJava的基础开始,一步一步与大家分享一下这个强大的异步库的用法! RxJava 概念初步 RxJa ...

  5. Retrofit2+Rxjava学习到封装

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

  6. RxJava 基础的使用

    学习地址: github wiki 学习地址 ReactiveX 操作符学习地址 RxJava是ReactiveX(反应性扩展)的Java VM实现:一个用于通过使用可观察的序列组成异步和基于事件的程 ...

  7. 用大白话讲解RxJava原理

    近日外媒报道称,Google 其应用商店 Play Store 一次下架了超过 600 个违规 App:其中中国.印度以及新加坡为本次大规模下架 App 开发者前三的国家,来自中国的猎豹移动所开发的 ...

  8. 拥抱RxJava(番外篇):关于RxJava的Tips Tricks

    前言: 起初写 拥抱RxJava 系列文章.只是因为看到很多人在使用RxJava时候,并没有很正确的理解Reactive Programming.仅仅在项目中使用了Retrofit的Rx Adapte ...

  9. 业务异常 java_谈谈RxJava处理业务异常的几种方式

    此文介绍了RxJava处理业务异常的几种方式,分享给大伙.具体如下: 关于异常 Java的异常可以分为两种:运行时异常和检查性异常. 运行时异常: RuntimeException类及其子类都被称为运 ...

最新文章

  1. SpringBootMybatis 关于Mybatis-generator-gui的使用|数据库的编码注意点|各项复制模板...
  2. Swift中依赖注入的解耦策略
  3. 1.3 万亿条数据查询,知乎如何做到毫秒级响应?
  4. Hdu 4738 Caocao's Bridges (连通图+桥)
  5. 快速设置UITableView不同section对应于不同种类的cell
  6. 看完这篇 HTTPS,和面试官扯皮就没问题了
  7. Dispose() C# 优化内存
  8. Delphi10 安装Graphics32
  9. Js中的for in
  10. python launcher卸载后蓝屏_误卸载python2.4导致yum不能用后的修复
  11. JMeter性能测试工具简介
  12. java 随机生成图_java – 如何生成随机图?
  13. golang echo框架案例
  14. 手把手教你做做一份高质量投标书
  15. vivo android 刷机教程,vivo Xshot升级Android 4.4刷机教程
  16. Mac的反编译工具一:otool (objdump工具的OSX对应工具)。
  17. 后缀树 Suffix Tree
  18. 三角法激光雷达测距原理
  19. 安卓sdk开发!阿里面试100%会问到的JVM,架构师必备技能
  20. 企业微信中打开的小程序wx.qy.getEnterpriseUserInfo接口调用报错42013

热门文章

  1. 用HashMap去重
  2. 浏览器访问网页的详细内部过程
  3. swfupload使用说明
  4. libevent for android
  5. Redhat enterprise linux下安装rlwrap工具
  6. ubuntu 下安装mplayer
  7. [原]简述Field,Attribute,Property的区别
  8. IOS多线程任务(综述篇)
  9. java基础—IO流概述
  10. Oracle 中调用外部C动态库函数