Rxjava入门(一)

作者: TrancyDeng | 来源:发表于2016-06-04 15:08 被阅读945次

    前言

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

    函数式编程(英语: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入门二

    相关文章

      网友评论

        本文标题:Rxjava入门(一)

        本文链接:https://www.haomeiwen.com/subject/pomldttx.html