在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(一) ...
随机推荐
- 2018即将过去,立个flag
过去的2018 自己有没有值得有意义的地方呢? 没有, 自己有没有认识新的异性朋友呢? 没有, 自己都在忙啥呢? 敲代码,然后发现敲坏了一个键盘,换了HHKB,一个字舒服,还有就是通宵把一部电视剧看完 ...
- BZOJ.3545.[ONTAK2010]Peaks(线段树合并)
题目链接 \(Description\) 有n个座山,其高度为hi.有m条带权双向边连接某些山.多次询问,每次询问从v出发 只经过边权<=x的边 所能到达的山中,第K高的是多少. \(Solut ...
- C、C++、C#、Java、php、python语言的内在特性及区别
C.C++.C#.Java.PHP.Python语言的内在特性及区别: C语言,它既有高级语言的特点,又具有汇编语言的特点,它是结构式语言.C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作 ...
- AngularJS中获取数据源的几种方式
在AngularJS中,可以从$rootScope中获取数据源,也可以把获取数据的逻辑封装在service中,然后注入到app.run函数中,或者注入到controller中.本篇就来整理获取数据的几 ...
- android: 碎片的demo
现在你已经将关于碎片的重要知识点都掌握得差不多了,不过在灵活运用方面可能还有 些欠缺,因此又该进入我们本章的最佳实践环节了. 前面有提到过,碎片很多时候都是在平板开发当中使用的,主要是为了解决屏幕空间 ...
- Image Processing in Python with Pillow
Introduction A lot of applications use digital images, and with this there is usually a need to proc ...
- shell命令行执行python(解析json)
每个脚本都有自己的擅长. 有次实现一个work,使用了shell,php,python看着文件种类多,不方便交接,看着也比较麻烦. 减少文件种类数,也是很有必要的. 遇到的场景:shell程序需要从j ...
- iOS开发-消息转发
消息转发是OC运行时比较重要的特性,Objective-C运行时的主要的任务是负责消息分发,我们在开发中"unrecognized selector sent to instance xx& ...
- javascript数据类型的判断
最近看到了很多关于数据类型判断的方法,总结了下 一.javascript的数据类型 js数据分为两种类型:原始数据类型和引用数据类型.原始数据类型有:string.number.boolean.und ...
- 版本控制-搭建git服务器
GitHub是一个免费托管开源代码的Git服务器,如果我们不想公开项目的源代码,又不想付费使用,那么我们可以自己搭建一台Git服务器. 下面我们就看看,如何在Ubuntu上搭建Git服务器.我们使用V ...