RxJava简单入门

RxJava简单介绍

前言
  • RxJava其实是一种观察者模式,而观察者模式,就必定存在事件源、事件的观察者。而观察者跟事件源也存在着一种订阅的关系,只有事件源被观察者所订阅,观察者才能接收到事件源发生的变化,观察者不用时刻的关注事件源,只有事件源发生改变,观察者便能收到通知。
基本概念
  • 现在说说RxJava所主要涉及到的对象
    1. Observable : 发射源,在观察者模式中担当着“被观察这”和“可观察对象”;
    2. Observer : 观察者,可接收发射源所发射的数据;
    3. Subject : 即可充当发射源,也可充当接受源。为了避免混淆,本文对subject不做详细讲解,将在以后的详细讲解中介绍;
    4. Subscriber : 订阅者,也是接收源,subscriber是继承自observer,可对已订阅的事件取消订阅。observer在subscribe()过程中最终也会转换成subscriber对象;
    5. Subscription : observer调用subscribe()方法返回的对象,同样具有unsubscribe()方法,用来取消订阅;
    6. Action0 : RxJava的一个接口,只有一个无参的call()方法,无返回值,类似的也有Action1、Action2…Action9,call()的参数也依次是1到9个;
    7. Func0 : 与Action0相似,有call()方法,但是有返回值的,同样也有Func1、Func2…Func9。
基本用法
  • observable的创建

最基本的创建方式,create()

Observable.create(new Observable.OnSubscribe<String>() {
    @Override
    public void call(Subscriber<? super String> subscriber) {
    // 发射一个hello的字符串
    subscriber.onNext("hello");    
    }
});

使用just()方法,会创出observable对象,并自动调用onNext()方法

Observable.just(6).subscribe(new Action1<Integer>() {
    @Override
    public void call(Integer integer) {
        // integer就是just()方法传入的参数6
    }
});

使用from(),会遍历集合或数组,发送每一个item

Observable.from(new String[]{ "hello", "android" })
.subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        // 会依次的拿到"hello"、"android"
    }
});
  • observer的创建
    只能通过一般的new来创建
Observer<String> observer = new Observer<String>() {
    @Override
    public void onCompleted() {
        // 数据接收完成
    }

    @Override
    public void onError(Throwable e) {
        // 数据接收出错
    }

    @Override
    public void onNext(String s) {

    }
};

有了observable跟observer对象,就可以订阅事件,想怎么玩都行了。上面通过just()跟from()创建的observable对象,是通过new Action1来订阅的,下面将通过另外一种方式,就是observable直接订阅observer对象。

Observable.just("hello").subscribe(observer);

在上面的onNext()中就可以拿到”hello”字符串,然后就可以做一系列处理,是不是很简单明了。当然,如果不需要关心数据是否接收完成跟是否会出错,可以直接用上面的new Action1作为参数传入subscribe(),在call()中做处理。


以上就是RxJava最简单的用法,虽然代码并没有比一般写法要少,但代码结构很整洁,逻辑也十分清晰,或者到了代码逻辑变了很多时,才能更好地体现RxJava的优雅。
现在有这样一个需求,有一个字符串,使用逗号间隔开的一串数字,要把大于0的取出来,然后再把拿到的数的两倍在打印出来。下面就直接上RxJava代码:

Observable.just("2, 4, 0, -3, 5, 7, -6, -2, 9, -10")
                .flatMap(new Func1<String, Observable<String>>() {
    @Override
    public Observable<String> call(String s) {
        // 返回每个item的一个observable对象
        return Observable.from(s.split(","));
    }})
    .filter(new Func1<String, Boolean>() {
        @Override
        public Boolean call(String s) {
            // 过滤掉不大于0的数
            return Integer.valueOf(s) > 0;
    }})
    .map(new Func1<String, Integer>() {
        @Override
        public Integer call(String s) {
            // 对拿到的每一个数进行处理
            Integer integer = Integer.valueOf(s);
            integer *= 2;
            return integer;
        }})
    .subscribe(new Action1<Integer>() {
        @Override
        public void call(Integer integer) {
            // 得到最后结果
            Log.d("result", String.valueOf(integer));
    }});

容易看出,思路是非常的清晰,而且还是一个链式编程,在逻辑变得愈加的复杂,代码还能保持简洁,可读性强。

总结

看了RxJava简单的介绍与及一些例子的应用,想必入门并没有原来想的那么难,如果上面的例子都理解了,我相信你已经跨进了RxJava的大门,剩下的就是继续学习实际的应用场景,还有各种强大的操作符,结合实际的例子进行学习,便能完完全全的掌握其中的奥妙。


另外,本人是初次写博客,有什么知识不全面的,请大家多包涵,如有什么好的建议,欢迎留言,可以一起探讨学习、交流!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值