当前位置:   article > 正文

RxJava中Observable的基本用法_rxjava observable

rxjava observable

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

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

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

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

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

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

2.create

  1. final List<String> list = Arrays.asList(new String[]
  2. {"one","two","three"});
  3. Observable observable = Observable.create(new
  4. OnSubscribe<List<String>>() {
  5. @Override
  6. public void call(Subscriber<? super
  7. List<String>> subscriber) {
  8. subscriber.onNext(list);
  9. subscriber.onCompleted();
  10. }
  11. });

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

当然可以:

  1. Observable observable = Observable.create(new
  2. OnSubscribe<String>() {
  3. @Override
  4. public void call(Subscriber<? super String>
  5. subscriber) {
  6. for (String str:list) {
  7. subscriber.onNext(str);
  8. }
  9. subscriber.onCompleted();
  10. }
  11. });

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

3.from

  1. Observable.from(list).subscribe(new Observer<String>() {
  2. @Override
  3. public void onCompleted() {
  4. System.out.println("onCompleted");
  5. }
  6. @Override
  7. public void onError(Throwable arg0) {
  8. }
  9. @Override
  10. public void onNext(String string) {
  11. System.out.println(string);
  12. }
  13. });

结果是:

one
two
three
onCompleted

符合我们的预期!

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

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

  1. Observable.just(list.get(1), list.get(2)).subscribe(new Observer<String>() {
  2. @Override
  3. public void onCompleted() {
  4. System.out.println("onCompleted");
  5. }
  6. @Override
  7. public void onError(Throwable arg0) {
  8. }
  9. @Override
  10. public void onNext(String string) {
  11. System.out.println(string);
  12. }
  13. });

结果:

two
three
onCompleted

符合我们的预期!

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

5.repeat

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

  1. Observable.from(list).repeat(2).subscribe(new
  2. Observer<String>() {
  3. @Override
  4. public void onCompleted() {
  5. System.out.println("onCompleted");
  6. }
  7. @Override
  8. public void onError(Throwable arg0) {
  9. }
  10. @Override
  11. public void onNext(String string) {
  12. System.out.println(string);
  13. }
  14. });

结果:

one
two
three
one
two
three
onCompleted

符合我们预期

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

6.range

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

  1. Observable.range(88,10).subscribe(new Observer<Integer>() {
  2. @Override
  3. public void onCompleted() {
  4. System.out.println("onCompleted");
  5. }
  6. @Override
  7. public void onError(Throwable arg0) {
  8. }
  9. @Override
  10. public void onNext(Integer arg0) {
  11. System.out.println(arg0+"");
  12. }
  13. });

88
89
90
91
92
93
94
95
96
97
onCompleted

7.interval(测试失败)

间隔时间发射:

  1. Observable.interval(3, TimeUnit.SECONDS).subscribe(new Subscriber<Long>() {
  2. @Override
  3. public void onCompleted() {
  4. System.out.println("onCompleted");
  5. }
  6. @Override
  7. public void onError(Throwable arg0) {
  8. }
  9. @Override
  10. public void onNext(Long arg0) {
  11. System.out.println(arg0+"");
  12. }
  13. });

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

8.timer(测试失败)

延迟发射:

  1. Observable.timer(1, TimeUnit.SECONDS).subscribe(new Observer<Long>() {
  2. @Override
  3. public void onCompleted() {
  4. // TODO Auto-generated method stub
  5. }
  6. @Override
  7. public void onError(Throwable arg0) {
  8. // TODO Auto-generated method stub
  9. }
  10. @Override
  11. public void onNext(Long arg0) {
  12. System.out.println(arg0+"");
  13. }
  14. });

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

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


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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/300861
推荐阅读
相关标签
  

闽ICP备14008679号