【RxJava】Observable基本方法
来源:互联网 发布:北京美工培训班学费 编辑:程序博客网 时间:2024/04/26 07:47
1.前言
随着RxJava越来越火,相信在2016年必定会大方异彩。 虽然前前后后看了不少RxJava的文章,但都没有积累下来,又没有在实际项目中使用过。
因此特意写下这篇文章记录学习过程。
2.简介RxJava
一般我们进行耗时任务,如网络、数据库查询、复杂计算等等,我们都回开启一个线程,然后通过接口回调,获取我们的结果。 但随着我们业务逻辑的越来越复杂,我们就会陷入一个回调地狱,回调里面还有回调,在日后我们维护代码来说简直是噩梦。
RxJava的出现正式为了解决这个问题而生的,它支持链式调用!
关键字:异步、链式调用、观察者模式
这篇文章主要来记录Observable基本用法
2.create
final List<String> list = Arrays.asList(new String[] {"one","two","three"});Observable observable = Observable.create(new OnSubscribe<List<String>>() { @Override public void call(Subscriber<? super List<String>> subscriber) { subscriber.onNext(list); subscriber.onCompleted(); } });
可以发现,我们发射的是以整个List<String>
我们可以发射一个一个对象吗?
当然可以:
Observable observable = Observable.create(new OnSubscribe<String>() { @Override public 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>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable arg0) { } @Override public void onNext(String string) { System.out.println(string); } });
结果是:
onetwothreeonCompleted
符合我们的预期!
4.just
如果我只想发射list中的第二和第三位可以吗?
当然可以,我们可以借助just方法:
Observable.just(list.get(1), list.get(2)).subscribe(new Observer<String>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable arg0) { } @Override public void onNext(String string) { System.out.println(string); } });
结果:
twothreeonCompleted
符合我们的预期!
备注:just方法可以接受1-10个参数
5.repeat
如果我们想将整个list重复发射两次或者三次呢?
Observable.from(list).repeat(2).subscribe(new Observer<String>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable arg0) { } @Override public void onNext(String string) { System.out.println(string); } });
结果:
onetwothreeonetwothreeonCompleted
符合我们预期
备注:repeat可以不传参,效果是:无限循环
6.range
从X按顺序输出Y位数字?
Observable.range(88,10).subscribe(new Observer<Integer>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable arg0) { } @Override public void onNext(Integer arg0) { System.out.println(arg0+""); } });
88899091929394959697onCompleted
7.interval(测试失败)
间隔时间发射:
Observable.interval(3, TimeUnit.SECONDS).subscribe(new Subscriber<Long>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable arg0) { } @Override public void onNext(Long arg0) { System.out.println(arg0+""); } });
很奇怪,这个方法并没有起作用。
8.timer(测试失败)
延迟发射:
Observable.timer(1, TimeUnit.SECONDS).subscribe(new Observer<Long>() { @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+""); } });
这个方法和interval一样,也是不能测试。
它还有一个三个参数的方法timer(3,3,TimeUnit.SECONDS) 延迟3秒之后,每隔3秒发射一次
0 0
- 【RxJava】Observable基本方法
- RxJava—Observable
- observable()方法
- RxJava-创建Observable操作符
- RxJava-简介及Observable创建
- RXJava——创建 Observable
- RxJava 1.x Observable分析
- RxJava使用小总结:Observable的创建方式、过滤Observable
- 给 Android 开发者的 RxJava 详解 Observable
- Rxjava的Observable创建操作符介绍
- RxJava----操作符:cold&hot Observable
- 使用RxJava.Observable取代AsyncTask和AsyncTaskLoader
- RxJava 驯服数据流之 hot & cold Observable
- RxJava 驯服数据流之 hot & cold Observable
- RxJava 驯服数据流之 hot & cold Observable
- RxJava(二:Observable 创建,组合与过滤)
- RxJava 源码解析 —— Observable#defer(...)
- 用RxJava.Observable取代AsyncTask和AsyncTaskLoader-RxJava Android模版
- 331. Verify Preorder Serialization of a Binary Tree
- Maven学习 (六) 搭建多模块企业级项目
- Fragment使用(二)
- 【Android开发小记--6】动画--属性动画以及Fragment切换动画(3D)
- 【连通分量】BZOJ 1051:[HAOI2006]受欢迎的牛
- 【RxJava】Observable基本方法
- HDOJ 1224 Free DIY Tour (Floyd + 打印路径)
- ASP.NET中FORM验证中的cookieless属性
- 检测远程端口是否打开
- 3351: [ioi2009]Regions
- 数据结构基础之栈与递归
- 数组方法归纳
- Win10关闭休眠方法
- 【连通分量】BZOJ 1093: [ZJOI2007]最大半连通子图