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

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

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();}});

可以发现,我们发射的是以整个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();}});

这样看起来好像还不是很优雅!有没有办法刚优雅呢? 那我们来看看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);}});

结果是:

one
two
three
onCompleted

符合我们的预期!

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);}});

结果:

two
three
onCompleted

符合我们的预期!

备注: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);}});

结果:

one
two
three
one
two
three
onCompleted

符合我们预期

备注: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+"");}});

88
89
90
91
92
93
94
95
96
97
onCompleted

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+"");}});

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

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+"");}});

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

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

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

RxJava中Observable的基本用法相关推荐

  1. observable android,RxAndroid中observable的基本使用和表单校验操作

    RxAndroid 响应式编程 类似于监听-观察者模式 在观察者模式中,你的对象需要实现 RxJava 中的两个关键接口:Observable 和 Observer.当 Observable 的状态改 ...

  2. 如何形象地描述 RxJava 中的背压和流控机制?

    之前我在知乎上受邀回答过一个关于RxJava背压(Backpressure)机制的问题,今天我把它整理出来,希望对更多的人能有帮助. RxJava的官方文档中对于背压(Backpressure)机制比 ...

  3. 深入Java泛型(四):RxJava中泛型的使用分析

    RxJava出现在我们的视线已经很久了,我自己也有阅读过非常多的文章,谈不上精通,但是勉强称得上会一些简单的使用,近日总是对这种响应式的编程,对RxJava魂牵梦绕,深刻的感觉到自己对泛型的认识,理解 ...

  4. MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法

    说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都在它的源码 ...

  5. rxjava背压_如何形象地描述RxJava中的背压和流控机制?

    之前我在知乎上受邀回答过一个关于RxJava背压(Backpressure)机制的问题,今天我把它整理出来,希望对更多的人能有帮助. RxJava的官方文档中对于背压(Backpressure)机制比 ...

  6. RxJava中常见的几种Subject

    RxJava是什么? 原文是这样描述的: RxJava is a Java VM implementation of Reactive Extensions: a library for compos ...

  7. [译] RxJava 中的错误处理

    本文讲的是[译] RxJava 中的错误处理, 原文地址:Error handling in RxJava 原文作者:Dmitry Ryadnenko 译文出自:掘金翻译计划 本文永久链接:githu ...

  8. 合并RxJava的Observable数据流

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

  9. PHP中魔术方法的用法

    PHP中魔术方法的用法 /** PHP把所有以__(两个下划线)开头的类方法当成魔术方法.所以你定义自己的类方法时,不要以 __为前缀. * */// __toString.__set.__get__ ...

最新文章

  1. pandas使用query函数删除dataframe中两个数据列加和小于某一特定值的数据行(removing rows based on multiple dataframe column value
  2. 入门大爆炸式发展的深度学习,你先要了解这4个最流行框架
  3. css样式继承规则详解
  4. C++ inline函数和宏
  5. 关于IC工程师的VIM实际工作技巧
  6. Spring - Java/J2EE Application Framework 应用框架 第 6 章 集成AspectJ
  7. c++和java哪个难_2020 年 11 月编程语言排行榜,Python 超越 Java ?
  8. Spring多数据源解决方案
  9. jquery 全选获取值
  10. 度量相似性数学建模_数学之美读书笔记
  11. python3字典详解_Python3实现的字典遍历操作详解
  12. 5 分钟掌握智联招聘网站爬取并保存到 MongoDB 数据库
  13. 中国甲鱼养殖行业发展现状分析,浙江省产量最高「图」
  14. 网页iframe框架常见的应用例子
  15. pytorch高版本(如1.7.0)RuntimeError: Legacy autograd function with non-static forward method is deprecate
  16. 虚拟化介绍及Docker与传统虚拟化有什么区别
  17. 抖音带货赚钱吗?有哪些技巧?
  18. 美团饿了么外卖返利小程序公众号搭建外卖返利分销系统代cps源码
  19. 华语金曲30年30歌
  20. Foreign Language_english_感叹句

热门文章

  1. 设置win10输入法的自学习功能 破个性化无法设置
  2. Android Launcher研究(二)-----------Launcher为何物,究竟是干什么的?
  3. 上海迪士尼和香港迪士尼的区别?
  4. 十字路口交通信号灯控制系统
  5. 抢滩“数字厨电”时代,老板电器用全新“数字人”冲阵
  6. 随机数 - 时间种子的方案与实践
  7. Java中对泛型的理解及应用
  8. 【JavaScript】freecodecamp------Seek and Destroy
  9. 苹果明日发布第二财季财报 此前预计营收550到590亿美元
  10. 【Spring(八)】父子容器