RxJava中Observable的基本用法
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的基本用法相关推荐
- observable android,RxAndroid中observable的基本使用和表单校验操作
RxAndroid 响应式编程 类似于监听-观察者模式 在观察者模式中,你的对象需要实现 RxJava 中的两个关键接口:Observable 和 Observer.当 Observable 的状态改 ...
- 如何形象地描述 RxJava 中的背压和流控机制?
之前我在知乎上受邀回答过一个关于RxJava背压(Backpressure)机制的问题,今天我把它整理出来,希望对更多的人能有帮助. RxJava的官方文档中对于背压(Backpressure)机制比 ...
- 深入Java泛型(四):RxJava中泛型的使用分析
RxJava出现在我们的视线已经很久了,我自己也有阅读过非常多的文章,谈不上精通,但是勉强称得上会一些简单的使用,近日总是对这种响应式的编程,对RxJava魂牵梦绕,深刻的感觉到自己对泛型的认识,理解 ...
- MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法
说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都在它的源码 ...
- rxjava背压_如何形象地描述RxJava中的背压和流控机制?
之前我在知乎上受邀回答过一个关于RxJava背压(Backpressure)机制的问题,今天我把它整理出来,希望对更多的人能有帮助. RxJava的官方文档中对于背压(Backpressure)机制比 ...
- RxJava中常见的几种Subject
RxJava是什么? 原文是这样描述的: RxJava is a Java VM implementation of Reactive Extensions: a library for compos ...
- [译] RxJava 中的错误处理
本文讲的是[译] RxJava 中的错误处理, 原文地址:Error handling in RxJava 原文作者:Dmitry Ryadnenko 译文出自:掘金翻译计划 本文永久链接:githu ...
- 合并RxJava的Observable数据流
本文讨论几种不同方式合并RxJava的Observable数据流. Observable介绍 Observable 序列,或简单称为Observable,表示异步数据流.这些概念遵循基于观察者模式,在 ...
- PHP中魔术方法的用法
PHP中魔术方法的用法 /** PHP把所有以__(两个下划线)开头的类方法当成魔术方法.所以你定义自己的类方法时,不要以 __为前缀. * */// __toString.__set.__get__ ...
最新文章
- pandas使用query函数删除dataframe中两个数据列加和小于某一特定值的数据行(removing rows based on multiple dataframe column value
- 入门大爆炸式发展的深度学习,你先要了解这4个最流行框架
- css样式继承规则详解
- C++ inline函数和宏
- 关于IC工程师的VIM实际工作技巧
- Spring - Java/J2EE Application Framework 应用框架 第 6 章 集成AspectJ
- c++和java哪个难_2020 年 11 月编程语言排行榜,Python 超越 Java ?
- Spring多数据源解决方案
- jquery 全选获取值
- 度量相似性数学建模_数学之美读书笔记
- python3字典详解_Python3实现的字典遍历操作详解
- 5 分钟掌握智联招聘网站爬取并保存到 MongoDB 数据库
- 中国甲鱼养殖行业发展现状分析,浙江省产量最高「图」
- 网页iframe框架常见的应用例子
- pytorch高版本(如1.7.0)RuntimeError: Legacy autograd function with non-static forward method is deprecate
- 虚拟化介绍及Docker与传统虚拟化有什么区别
- 抖音带货赚钱吗?有哪些技巧?
- 美团饿了么外卖返利小程序公众号搭建外卖返利分销系统代cps源码
- 华语金曲30年30歌
- Foreign Language_english_感叹句
热门文章
- 设置win10输入法的自学习功能 破个性化无法设置
- Android Launcher研究(二)-----------Launcher为何物,究竟是干什么的?
- 上海迪士尼和香港迪士尼的区别?
- 十字路口交通信号灯控制系统
- 抢滩“数字厨电”时代,老板电器用全新“数字人”冲阵
- 随机数 - 时间种子的方案与实践
- Java中对泛型的理解及应用
- 【JavaScript】freecodecamp------Seek and Destroy
- 苹果明日发布第二财季财报 此前预计营收550到590亿美元
- 【Spring(八)】父子容器