在android 上 使用 rxjava 入门篇
什么是 rxJava?
RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.
简单来说,rxJava 是一种 基于事件的,使用了可被观察序列 的异步 响应 扩展 的类库。
这句话有这几个意思:
rxJava 是解决 异步问题的。
rxJava 是基于事件机制的。
rxJava 是处理响应扩展的,解决 事件的响应问题(比如事件的响应在哪个线程?)。
rxJava 是序列的。它是个有顺序的队列,按顺序的,先进后出的。它对集合对象的支持很好。
rxJava 使用了 设计模式里的 观察者模式 来实现。
引用类库
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
代码里如何使用
rxJava的代码长这样:
Observable.from(userBeans)
.map(new Func1<UserBean, String>() {
@Override
public String call(UserBean userBean) { return String.format("%s(%s)", userBean.name, userBean.age);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<String>() {
@Override
public void call(String str) { alert(str);
}
});
这段代码告诉了我们:
Observable.from () 创建了一个被观察的对象。
.map() 方法执行了转换,将对象转成字符串
.subscribeOn() 指示了 在哪个线程里执行 上面的转换操作。
.observeOn() 指示了 在哪个线程里执行 对结果的响应操作,比如后面的 alert 方法。
.subscribe() 传递了具体的响应处理,即执行了 alert方法。
代码很优雅,链式的写法,很清晰的表达了代码的行为。
从单个对象创建被观察对象的演示
使用 just() 方法,指定单个对象来创建被观察对象实例。
private void doSomeOne() {
Observable.just("Hello, world!").subscribe(new Action1<String>() {
@Override
public void call(String str) {
alert(str);
}
});
}
从一个集合创建被观察对象的演示
使用 from() 方法,指定一个集合来创建被观察对象实例。
private void doSomeArray() {
Observable.from(new String[]{"A", "B", "C"}).subscribe(new Action1<String>() {
@Override
public void call(String str) {
alert(str);
}
});
}
对象转换的演示
我们使用 map() 方法进行转换。下面的代码演示了 从 UserBean数组创建被观察对象,然后使用map()方法转换成 字符串。
private void doSomeEntity() {
UserBean[] userBeans = new UserBean[3];
userBeans[0] = new UserBean("jo", 18);
userBeans[1] = new UserBean("ken", 9);
userBeans[2] = new UserBean("hack", 30);
//增加了map方法,转出 实体到字符串
Observable.from(userBeans).map(new Func1<UserBean, String>() {
@Override
public String call(UserBean userBean) {
return String.format("%s(%s)", userBean.name, userBean.age);
}
}).subscribe(new Action1<String>() {
@Override
public void call(String str) {
alert(str);
}
});
}
参考:
https://github.com/ReactiveX/RxJava
http://gank.io/post/560e15be2dca930e00da1083
在android 上 使用 rxjava 入门篇的更多相关文章
- 【Android开发日记】之入门篇(七)——Android数据存储(上)
在讲解Android的数据源组件——ContentProvider之前我觉得很有必要先弄清楚Android的数据结构. 数据和程序是应用构成的两个核心要素,数据存储永远是应用开发中最重要的主题之一,也 ...
- Android Studio2.0 教程从入门到精通Windows版 - 入门篇
http://www.open-open.com/lib/view/open1468121363300.html 本文转自:深度开源(open-open.com)原文标题:Android Studio ...
- 【Android开发日记】之入门篇(十二)——Android组件间的数据传输
组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制 ...
- 【Android开发日记】之入门篇(三)——Android目录结构
本来的话,这一章想要介绍的是Android的系统架构,毕竟有了这些知识的储备,再去看实际的项目时才会更清楚地理解为什么要这样设计,同时在开发中遇到难题,也可以凭借着对Android的了解,尽快找出哪些 ...
- 史上最浅显易懂的RxJava入门教程
RxJava是一个神奇的框架,用法很简单,但内部实现有点复杂,代码逻辑有点绕.我读源码时,确实有点似懂非懂的感觉.网上关于RxJava源码分析的文章,源码贴了一大堆,代码逻辑绕来绕去的,让人看得云里雾 ...
- Android数据绑定DataBinding(二)入门篇
前言 之前写了Android数据绑定DataBinding(一)入门篇,很简单的记录了如何使用DataBinding,其初衷是想要代码中的数据发生改变,不需要繁琐的setText等操作,在最后说到了只 ...
- 系列篇|编译可在Android上运行的依赖库(一):glib库
前言 这是系列文章,它们由<编译可在Android上运行的glib库>及其他4篇文章组成,这4篇文章在“编译依赖库”一节中列出.由于glib库依赖于其他第三方库,所以需要先将依赖的第三方库 ...
- Apache Maven 入门篇 ( 上 )
作者:George Ma 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法. 这个入门篇分上下两篇.本文着重动手,用 mav ...
- 最牛逼android上的图表库MpChart(一) 介绍篇
最牛逼android上的图表库MpChart一 介绍篇 MpChart优点 MpChart是什么 MpChart支持哪些图表 MpChart效果如何 最牛逼android上的图表库MpChart(一) ...
随机推荐
- ios技术篇:导航栏push遵循的三个规则
1.如果B视图有一个自定义的左侧按钮(leftBarButtonItem),则会显示这个自定义按钮 2.如果B没有自定义按钮,但是A视图的backBarButtonItem属性有自定义项,则显示这个自 ...
- go语言学习-goroutine
o 语言有一个很重要的特性就是 goroutine, 我们可以使用 goroutine 结合 channel 来开发并发程序. 并发程序指的是可以同时运行多个任务的程序,这里的同时运行并不一定指的是同 ...
- BufferedReader的小例子
注意: BufferedReader只能接受字符流的缓冲区,因为每一个中文需要占据两个字节,所以需要将System.in这个字节输入流变为字符输入流,采用: BufferedReader buf = ...
- 运行程序,解读this指向---case1
一.分析代码执行结果 var length = 10; function fn() { console.log(this.length); } var obj = { length: 5, metho ...
- BZOJ.3575.[HNOI2014]道路堵塞(最短路 动态SPFA)
题目链接 \(Description\) 给你一张有向图及一条\(1\)到\(n\)的最短路.对这条最短路上的每条边,求删掉这条边后\(1\)到\(n\)的最短路是多少. \(Solution\) 枚 ...
- BZOJ.3598.[SCOI2014]方伯伯的商场之旅(贪心 数位DP)
题目链接 先考虑,对于确定的一个数,怎样移动代价最少(或者移到哪个位置最优)? 假设我们都移到下标\(1\)位置(设集合点为\(1\)),那么移动到下标\(2\)与\(1\)相比代价差为:\(下标&l ...
- 早期(编译器)优化--Java语法糖的味道
1.泛型与类型擦除 泛型的本质是参数化类型的应用,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口和泛型方法.在泛型没有出现之前,只能通过 ...
- C++学习笔记43:STL
STL简介(standard Template Library) STL的基本组件:容器(container),迭代器(iterator),函数对象(function object) 算法(algor ...
- 本地Sql Server数据库传到服务器数据库
将网站项目上传到服务器时,会遇到本地数据库该如何上传的问题.下面在西部数码购买的虚拟主机的基础上,解决数据库上传问题. 1.在西部数码购买虚拟主机后,会赠送了一个数据库,该数据库就可以作为网站项目 ...
- 数据结构笔记1_求第k个最大者
参考的文章有: http://www.cnblogs.com/CCBB/archive/2009/06/01/1493971.html http://www.cnblogs.com/zhangchao ...