什么是 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 入门篇的更多相关文章

  1. 【Android开发日记】之入门篇(七)——Android数据存储(上)

    在讲解Android的数据源组件——ContentProvider之前我觉得很有必要先弄清楚Android的数据结构. 数据和程序是应用构成的两个核心要素,数据存储永远是应用开发中最重要的主题之一,也 ...

  2. Android Studio2.0 教程从入门到精通Windows版 - 入门篇

    http://www.open-open.com/lib/view/open1468121363300.html 本文转自:深度开源(open-open.com)原文标题:Android Studio ...

  3. 【Android开发日记】之入门篇(十二)——Android组件间的数据传输

    组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制 ...

  4. 【Android开发日记】之入门篇(三)——Android目录结构

    本来的话,这一章想要介绍的是Android的系统架构,毕竟有了这些知识的储备,再去看实际的项目时才会更清楚地理解为什么要这样设计,同时在开发中遇到难题,也可以凭借着对Android的了解,尽快找出哪些 ...

  5. 史上最浅显易懂的RxJava入门教程

    RxJava是一个神奇的框架,用法很简单,但内部实现有点复杂,代码逻辑有点绕.我读源码时,确实有点似懂非懂的感觉.网上关于RxJava源码分析的文章,源码贴了一大堆,代码逻辑绕来绕去的,让人看得云里雾 ...

  6. Android数据绑定DataBinding(二)入门篇

    前言 之前写了Android数据绑定DataBinding(一)入门篇,很简单的记录了如何使用DataBinding,其初衷是想要代码中的数据发生改变,不需要繁琐的setText等操作,在最后说到了只 ...

  7. 系列篇|编译可在Android上运行的依赖库(一):glib库

    前言 这是系列文章,它们由<编译可在Android上运行的glib库>及其他4篇文章组成,这4篇文章在“编译依赖库”一节中列出.由于glib库依赖于其他第三方库,所以需要先将依赖的第三方库 ...

  8. Apache Maven 入门篇 ( 上 )

    作者:George Ma 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法. 这个入门篇分上下两篇.本文着重动手,用 mav ...

  9. 最牛逼android上的图表库MpChart(一) 介绍篇

    最牛逼android上的图表库MpChart一 介绍篇 MpChart优点 MpChart是什么 MpChart支持哪些图表 MpChart效果如何 最牛逼android上的图表库MpChart(一) ...

随机推荐

  1. ios技术篇:导航栏push遵循的三个规则

    1.如果B视图有一个自定义的左侧按钮(leftBarButtonItem),则会显示这个自定义按钮 2.如果B没有自定义按钮,但是A视图的backBarButtonItem属性有自定义项,则显示这个自 ...

  2. go语言学习-goroutine

    o 语言有一个很重要的特性就是 goroutine, 我们可以使用 goroutine 结合 channel 来开发并发程序. 并发程序指的是可以同时运行多个任务的程序,这里的同时运行并不一定指的是同 ...

  3. BufferedReader的小例子

    注意: BufferedReader只能接受字符流的缓冲区,因为每一个中文需要占据两个字节,所以需要将System.in这个字节输入流变为字符输入流,采用: BufferedReader buf = ...

  4. 运行程序,解读this指向---case1

    一.分析代码执行结果 var length = 10; function fn() { console.log(this.length); } var obj = { length: 5, metho ...

  5. BZOJ.3575.[HNOI2014]道路堵塞(最短路 动态SPFA)

    题目链接 \(Description\) 给你一张有向图及一条\(1\)到\(n\)的最短路.对这条最短路上的每条边,求删掉这条边后\(1\)到\(n\)的最短路是多少. \(Solution\) 枚 ...

  6. BZOJ.3598.[SCOI2014]方伯伯的商场之旅(贪心 数位DP)

    题目链接 先考虑,对于确定的一个数,怎样移动代价最少(或者移到哪个位置最优)? 假设我们都移到下标\(1\)位置(设集合点为\(1\)),那么移动到下标\(2\)与\(1\)相比代价差为:\(下标&l ...

  7. 早期(编译器)优化--Java语法糖的味道

    1.泛型与类型擦除 泛型的本质是参数化类型的应用,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口和泛型方法.在泛型没有出现之前,只能通过 ...

  8. C++学习笔记43:STL

    STL简介(standard Template Library) STL的基本组件:容器(container),迭代器(iterator),函数对象(function object) 算法(algor ...

  9. 本地Sql Server数据库传到服务器数据库

    将网站项目上传到服务器时,会遇到本地数据库该如何上传的问题.下面在西部数码购买的虚拟主机的基础上,解决数据库上传问题.   1.在西部数码购买虚拟主机后,会赠送了一个数据库,该数据库就可以作为网站项目 ...

  10. 数据结构笔记1_求第k个最大者

    参考的文章有: http://www.cnblogs.com/CCBB/archive/2009/06/01/1493971.html http://www.cnblogs.com/zhangchao ...