RxJava系列之一 初识Rxjava
2015-08-11 22:28
363 查看
1.简介
基础知识响应式代码的基本组成部分是Observables和Subscribers(事实上Observer才是最小的构建块,但实践中使用最多的是Subscriber,因为Subscriber才是和Observables的对应的。)。
Observable发送消息,而Subscriber则用于消费消息。消息的发送是有固定模式的。Observable可以发送任意数量的消息(包括空消息),
当消息被成功处理或者出错时,流程结束。Observable会调用它的每个Subscriber的Subscriber.onNext()函数,并最终以Subscriber.onComplete()或者Subscriber.onError()结束。
这看起来像标准的观察者模式, 但不同的一个关键点是:Observables一般只有等到有Subscriber订阅它,
才会开始发送消息(术语上讲就是热启动Observable和冷启动Observable。热启动Observable任何时候都会发送消息,
即使没有任何观察者监听它。冷启动Observable只有在至少有一个订阅者的时候才会发送消息(我的例子中都是只有一个订阅者)。这个区别对于开始学习RxJava来说并不重要。)。
换句话说,如果没有订阅者观察它,那么将不会起什么作用。
2.第一个Rxjava 程序
好了,想要在项目中使用rxjava, 只需要通过在gradle中添加如下:compile’io.reactivex:rxjava:1.0.13’ 目前最新版本 (本人使用的是gradle,大家可以通过github查看rxjava的其他部署)
先来写个小实例:
(这里只粘贴了部分代码全部代码请看文章底部)通过RxJava给TextView 设置内容。(这里只是做个演示,并没什么卵用) 先创建Observable private Observable<String> cerateObserver() { return Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("第一个RxJava"); subscriber.onCompleted(); } }); } 再创建一个 Subscriber private Subscriber<String> createSubscriber() { return new Subscriber<String>() { @Override public void onCompleted() { Log.i(TAG, "on completed"); } @Override public void onError(Throwable e) { Log.i(TAG, "on error"); } @Override public void onNext(String s) { Log.i(TAG, "next Value = " + s); mTextView.setText(s); } }; } //最后把他两绑定一下。 observable.subscribe(subscriber);
OK,效果图出来了。
为了打印那几个字写那么多代码也是醉了。
好吧, 下面看看更简洁的代码。
//下面的代码乍一看可能难以接受, 慢慢来 Observable.just("第二个RxjavaDemo").subscribe(new Action1<String>() { @Override public void call(String s) { mTextView.setText(s); } });
从上面的代码中,我们用到了两个新的东西
1. Observer的just 和 Action1
其实 Observer为我们提供了很多便捷的快速操作。而just的作用是只发送一次任务,然后结束。而Action我们可以理解为Subscriber的其中一个子部分。
比如: Subscriber里有三个函数 onCompleted onError onNext我们可以把它们理解为三个Action
而Action1代表的是只有一个参数, 类似推理: 会不会有Action2, Action3 等等呢, 等待着大家去发掘
当然,如果大家用的jdk是1.8 的话,可以通过lambdas表达式来优化代码:
Observable.just("第二个RxJavaDemo lambdas").subscribe(t -> mTextView.setText(t));
是不是瞬间感觉碉堡了。
好了,我们已经学会了just的用法。
其实 Observable提供了大量的Operators来简化我们代码的写法。
操作符的作用是在Observable和最终的Subscriber之间修改Observable发出的事件。
下面我们将介绍到:map操作符的简单用法map操作符的作用就是将一个事件转换成另一个事件。
举个例子, 比如说: 服务器现在返回了一段字符串,我需要将字符串重新拼接成新的字符串,并加载数据。
这时,我们就可以通过map操作。
Observable.just(url).map(new Func1<String, String>() { @Override public String call(String s) { return "http://www.baidu.com/" + s; } }).subscribe(new Action1<String>() { @Override public void call(String s) { mTextView.setText(s); } }); //如果你有lamdba Observable.just(url).map(f -> "http://www.baidu.com/" + f).subscribe(t -> mTextView.setText(t));
map操作符的特点是: 你传递一个Observable对象给他, 他返回你一个Observable对象, 但是不需要对应Observable的返回类型。下一节我们将详细的介绍map的操作,并且顺带着会通过RxJava的衍伸版RxAndroid来写一个最简单的网络请求。敬请期待。。。
(文章内容参考了官方,以及其他几位大神的作品)
源码地址:点击进入
欢迎关注我的微信公众号:androidesigner
通过微信扫描二维码即可关注。
相关文章推荐
- java代码中 路径符号的写法
- java封装好处和原则
- 二分查找的两种实现方式(JAVA)
- [笔记][Java7并发编程实战手册]2.5使用Lock实现同步二
- Win7环境下JDK的安装与配置
- java学习阶段三:运算符和结构学习
- Java日志框架
- MyEclipse上整合spring,mybatis报错
- Java中的引用传递及其使用
- java堆栈迷宫算法
- Java 多线程
- 8_11_Java基础
- java实现sftp服务器文件上传、下载、删除
- Java三目运算
- 201301 JAVA 题目2-3级_棋盘问题
- (转)JAVA的整型与字符串相互转换
- java中String对象的常用方法
- Java学习整理系列之ThreadLocal的理解
- 疯狂JAVA讲义个人笔记——第四章
- Struts2多文件的上传