Rxjava入门 一

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

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

1
2
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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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在没有任何事件需要处理之后执行。

1
observable.subscribe(subscriber);

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

可以看到helloworld输出出来了。一次事件完成。 另外,我们还发现onCompleted也被打印了出来。

打印数组

  刚才我们输出了helloworld。有人问,如果是数组呢,或者是List()。Rxjava已经为我们考虑到了。Observable给我们提供了多种初始化方式,最常见的除了just()方式外还有from()
构造
  我们从图片中可以看到,构造方法里是各种泛型,我们可以传入类似于数组的参数,比如List Map Array及其子类。
初始化
  我们再次创建了observable对象,剩下的步骤读者应该知道了吧,这里我直接给出代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值