Rxjava入门(一)

前言

** 先看维基百科的解释**

函数式编程(英语:functional programming)或称函数程序设计,又称泛函编程,是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。

现在函数式编程越来越流行,这种编程方式强调程序执行的结果而非执行的过程。结合MVP设计模式让我们开发变得越来越便捷。
  不过东西好是好,对于新手来说入门有些困难。Rxjava入门还是有些时间成本的。Android要实现函数式编程需要引入两个库文件,方式如下:
RxJava
RxAndroid

compile 'io.reactivex:rxjava:x.y.z'
compile 'io.reactivex:rxandroid:1.2.0'

说了半天,到底什么是rxjava呢,初学者肯定一头雾水。简单来说,ReactiveX就是”观察者模式+迭代器模式+函数式编程”,它扩展了观察者模式,通过使用可观察的对象序列流来表述一系列事件,订阅者进行占点观察并对序列流做出反应(或持久化或输出显示等等);借鉴迭代器模式,对多个对象序列进行迭代输出,订阅者可以依次处理不同的对象序列;使用函数式编程思想(functional programming),极大简化问题解决的步骤。

RxJava最核心的两个东西就是Observables(被观察者,也就是事件源)和Subscribers(观察者),由Observables发出一系列的事件,Subscribers进行订阅接收并进行处理,看起来就好像是设计模式中的观察者模式,但是跟观察者模式不同的地方就在于,如果没有观察者(即Subscribers),Observables是不会发出任何事件的。
  通俗来讲,Observables就是个事件发射器,将事件发射到Subscribers上进行处理。如果事件不唯一,就会对事件进行轮询处理,如果在此过程中出现异常就直接抛出,事件中断。

说了这么久,对于新手来说依旧没什么印象,反而觉得复杂难懂。下面我们来结合例子说明

编写helloworld

Observable<String> observable = Observable.just("helloworld");

首先我们创建了一个Observable对象,然后将“helloworld”数据传递给他。不过现在observable不会有任何动作,我们刚才说过,没有subscriber对象,Observables是不会发出事件的。

         Subscriber<String> subscriber = new Subscriber<String>() {
            @Override
            public void onCompleted() {
                 System.out.println("onCompleted");
            }

            @Override
            public void onError(Throwable e) {
                 System.out.println("onCompleted");
            }

            @Override
            public void onNext(String s) {
                System.out.println(s);
            }
        };

现在我们创建了subscriber对象,它是用来处理事件的。subscriber中有三个方法分别是onNext、onError、onCompleted,从这个方法中可以看出,onNext可以多次执行,但在这里我们只有一个数据源,所以只会执行一次,onError在有错误的时候执行,onCompleted在没有任何事件需要处理之后执行。

 observable.subscribe(subscriber);

当subscriber订阅observable之后,事件开始发送。在这个过程中我们不关心内部是怎样发送数据的,如果没有异常发出,onNext应该会被调用。
我们运行一下程序

打印helloworld

可以看到helloworld输出出来了,一次事件完成。另外,我们还发现onCompleted也被打印了出来。
这里多说一句,当程序出错时是不会调用onCompleted方法的!

打印数组

刚才我们输出了helloworld。有人问,如果是数组呢,或者是List()。Rxjava已经为我们考虑到了。Observable给我们提供了多种初始化方式,最常见的除了just()方式外还有from()

构造方法列表

  我们从图片中可以看到,构造方法里是各种泛型,我们可以传入类似于数组的参数,比如List Map Array及其子类。

数组初始化

  我们再次创建了observable对象,剩下的步骤读者应该知道了吧,这里我直接给出代码

 Observable<String> observable = Observable
                .from(new String[]{"one", "two", "three", "four"});

        observable.subscribe(new Subscriber<String>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {
                System.out.println(s);
            }
        });
        
06-02 20:51:34.486 28207-28207/? I/System.out: one
06-02 20:51:34.486 28207-28207/? I/System.out: two
06-02 20:51:34.486 28207-28207/? I/System.out: three
06-02 20:51:34.486 28207-28207/? I/System.out: four
                        

今天的文章就到这里,下一章主要讲Rxjava的操作符使用,感兴趣的朋友请继续阅读Rxjava入门二

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容