RxJava系列之一 初识Rxjava

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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 09:29:03

RxJava系列之一 初识Rxjava的相关文章

RxJava系列之二 变换类操作符具体解释1

1.回想 上一篇文章我们主要介绍了RxJava , RxJava 的Observables和 RxJava的just操作符.以及RxJava一些经常使用的操作. 没看过的抓紧点我去看吧. 事实上RxJava有非常多的操作符, 而我们学过的just仅仅是创建类操作符的当中一种. 以后我会陆续介绍其它的创建类操作符. 文章代码地址:https://github.com/jiang111/RxJavaDemo 2. 变换类操作符之map 開始本篇文章的解说: map操作符的详细使用方法. map是属于

Android——初识RxJava

最近在看RxJava,在这里分享一下自己看的一些介绍RxJava不错的文章. 这是RxJava和RxAndroid在Github上的链接: RxJava Github主页:RxJava Github主页 RxAndroid Github主页:RxAndroid Github主页 下面是大头鬼Bruce对RxJava介绍的译文: 1.深入浅出RxJava(一:基础篇) 2.深入浅出RxJava(二:操作符) 3.深入浅出RxJava三–响应式的好处 4.深入浅出RxJava四-在Android中使

iOS流布局UICollectionView系列一——初识与简单使用UICollectionView

iOS流布局UICollectionView系列一--初识与简单使用UICollectionView 一.简介 UICollectionView是iOS6之后引入的一个新的UI控件,它和UITableView有着诸多的相似之处,其中许多代理方法都十分类似.简单来说,UICollectionView是比UITbleView更加强大的一个UI控件,有如下几个方面: 1.支持水平和垂直两种方向的布局 2.通过layout配置方式进行布局 3.类似于TableView中的cell特性外,Collecti

SpringMVC 框架系列之初识与入门实例

SpringMVC 框架系列之初识与入门实例 1.SpringMVC 概述 (1).什么是 MVC:Model-View-Control Control 层属于框架性质,完成的主要工作是:封装 web 请求为一个数据对象.调用业务逻辑层来处理数据对象.返回处理数据结果及相应的视图给客户端. (2).什么是 SpringMVC Spring mvc 和 Struts2 都属于表现层的框架,是 Spring 框架的一部分,Spring 框架的 Control 层的核心是 DispatcherServ

RxJava系列3(转换操作符)

前面两篇文章中我们介绍了RxJava的一些基本概念和RxJava最简单的用法.从这一章开始,我们开始聊聊RxJava中的操作符Operators,RxJava中的操作符主要分成了三类: 转换类操作符(map flatMap concatMap flatMapIterable switchMap scan groupBy ...): 过滤类操作符(fileter take takeLast takeUntil distinct distinctUntilChanged skip skipLast

RxJava系列4(过滤操作符)

前面一篇文章中我们介绍了转换类操作符,那么这一章我们就来介绍下过滤类的操作符.顾名思义,这类operators主要用于对事件数据的筛选过滤,只返回满足我们条件的数据.过滤类操作符主要包含: Filter Take TakeLast TakeUntil Skip SkipLast ElementAt Debounce Distinct DistinctUntilChanged First Last等等. Filter filter(Func1)用来过滤观测序列中我们不想要的值,只返回满足条件的值,

RxJava系列5(组合操作符)

这一章我们接着介绍组合操作符,这类operators可以同时处理多个Observable来创建我们所需要的Observable.组合操作符主要包含: Merge StartWith Concat Zip CombineLatest SwitchOnNext Join等等. Merge merge(Observable, Observable)将两个Observable发射的事件序列组合并成一个事件序列,就像是一个Observable发射的一样.你可以简单的将它理解为两个Obsrvable合并成了

Gradle系列之初识Gradle

原文首发于微信公众号:躬行之(jzman-blog) 学习 Android 有一段时间了,开发中经常使用到 Gradle ,但是不知道 Gradle 构建项目的原理,计划花一点时间学习一下 Gradle 相关的知识.Gradle 是一个非常优秀的项目构建工具,其 DSL(领域特定语言)基于 Groovy 实现,大部分功能通过插件的方式来实现,也可以自定义 Gradle 插件,下面开始入门 Gradle 系列的第一篇. 配置 Gradle 环境 首先确保在环境变量中配置好 JAVA_HOME,使用

Gradle for Android 系列:初识 Gradle 文件

读完本文你将了解到: settinggradle 主目录下的 buildgradle 模块下的 buildgradle 备注 注意 applicationId 和 package name 其实不是一个东西 总结 我们用 Android Studio 新创建一个项目时,会自动生成 3 个 Gradle 文件: 接下来介绍这三个文件的作用. 1. setting.gradle 上篇文章:为什么 Gradle 这么火 中介绍了, 一个 Gradle 构建通常包括三个阶段:初始化,配置,和执行. se