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

通过微信扫描二维码就可以关注。

RxJava系列之中的一个 初识Rxjava的更多相关文章

  1. hdu1465不easy系列之中的一个(错排)

    版权声明:本文为博主原创文章,未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/37512659 转载请注明出 ...

  2. 【iOS与EV3混合机器人编程系列之中的一个】iOS要干嘛?EV3能够更酷!

    乐高Mindstorm EV3智能机器人(下面简称EV3)自从在2013年的CES(Consumer Electronics Show美国消费电子展)上展出之后,就吸引了全球广大机器人爱好者的眼球!E ...

  3. [重磅] 让HTML5达到原生的体验 系列之中的一个 避免切页白屏

    非常多人都想.甚至曾使用HTML5开发跨平台App.而且想达到原生App的体验. 最后的结果都是无奈的放弃.HTML5貌似美好,但坑太多.想做到原生App的体验差点儿不可为. 也曾有过著名的faceb ...

  4. 《深入浅出pig系列之中的一个》pig-0.12.0-cdh5.1.2的安装与执行

    这里使用的版本号是cdh发行的pig-0.12.0-cdh5.1.2 下载地址点这里 1.Pig简单介绍: Pig是yahoo捐献给apache的一个项目.它是SQL-like语言.是在MapRedu ...

  5. 网络相关系列之中的一个:Android中使用HttpClient发送HTTP请求

    一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 "超文本传输协议",是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议,是 ...

  6. Ajax系列之中的一个:ajax旧貌换新颜

    什么是ajax? 什么是Ajax? Ajax就是Asynchronous +JavaScript+XML.中文翻译为:异步的javascript与XML,它是利用javascript语言和xml数据实 ...

  7. AWR系列之中的一个——AWR简单介绍

    AWR的全称是Automatic Workload Repository(自己主动负载知识库). 它是通过对照两次快照的方式收集到统计信息.来生成txt或者html页面形式的报告. 通常,通过AWR报 ...

  8. CGI原理解析系列之中的一个----CGI怎样获取WEBserver数据

    //gcc get_post.c -o get_post.ums; #include <stdio.h> #include <stdlib.h> #include <un ...

  9. RxJava系列番外篇:一个RxJava解决复杂业务逻辑的案例

    之前写过一系列RxJava的文章,也承诺过会尽快有RxJava2的介绍.无奈实际项目中还未真正的使用RxJava2,不敢妄动笔墨.所以这次还是给大家分享一个使用RxJava1解决问题的案例,希望对大家 ...

随机推荐

  1. 【简●解】[USACO] 照片Photo

    [简●解][USACO] 照片Photo [题目大意] 在\(1\)~\(N\)的序列上有\(M\)个区间,使得这\(M\)个小区间每个覆盖了且仅覆盖了一个点,求最多点数,如果无解,输出\(-1\). ...

  2. Fortran中常用函数列表

    Y=INT(X) 转换为整数 ALL(所有型态) INTEGER Y=REAL(X) 转换为实数 INTEGER REAL Y=DREAL(X) 取复数实部(倍精度) COMPLEX*16 REAL* ...

  3. 去BAT,你应该要看一看的面试经验总结

    我去年12月份从上一家公司离职,一直到今年3月份,基本上都在面试中度过来的. 先交代下背景:坐标上海,做技术开发,我本人面试的职位是linux服务器开发,最倾向的职位是服务器开发主程或技术经理.我本人 ...

  4. 生产环境屏蔽swagger(动态组装bean)

    spring动态组装bean 背景介绍: 整合swagger时需要在生产环境中屏蔽掉swagger的地址,不能在生产环境使用 解决方案 使用动态profile在生产环境中不注入swagger的bean ...

  5. Redis主从配置与数据备份还原

    一.主从配置: 1.下载: wget http://download.redis.io/releases/redis-4.0.9.tar.gz tar xzf redis-4.0.9.tar.gz c ...

  6. docker-ce快速部署

    配置yum源wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repowget -O ...

  7. mysql系列安装

    Mysql的5种安装方法:1.yum/rpm安装(适合要求不高,并发不大,公司内部,企业内部一些应用场景)2.编译安装(在线高并发业务)3.二进制安装(编译安装后,使用自带工具打包,然后拷贝到相同平台 ...

  8. 深入Linux内核架构——进程管理和调度(上)

    如果系统只有一个处理器,那么给定时刻只有一个程序可以运行.在多处理器系统中,真正并行运行的进程数目取决于物理CPU的数目.内核和处理器建立了多任务的错觉,是通过以很短的间隔在系统运行的应用程序之间不停 ...

  9. Django之学员管理三

    Django之学员管理三 web框架的本质: 本质是客户端和服务端的交互.用socket实现. socket客户端(浏览器) 2.发送ip和端口,http://www.baidu.com:80/ind ...

  10. python_装饰器——迭代器——生成器

    一.装饰器 1.什么是装饰器? 器=>工具,装饰=>增加功能 1.不修改源代码 2.不修改调用方式 装饰器是在遵循1和2原则的基础上为被装饰对象增加功能的工具 2.实现无参装饰器 1.无参 ...