继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

RxJava基础使用(一)

晨雨细曲
关注TA
已关注
手记 13
粉丝 3
获赞 41

RxJava是什么?

如果非要用一句话来概括的话,那就是RxJava是一个异步操作。

RxJava是一个和handler以及AscyTask一样的可以控制线程操作线程的一个异步操作。

既然RxJava和Handler以及AscyTask效果一样,那为什么要使用RxJava而不是干脆直接使用Handler或者AscyTask呐?
这个原因有两点。

第一,RxJava的操作简洁。这里需要说明一下,这里说的简洁是指逻辑上的简洁,并非一些人想象中的少写很多代码那种简洁。

第二,RxJava拥有一系列强大方便的操作符,可以完成很多以前需要复杂代码才能够完成的操作。这点Handler和AscyTask根本做不到RxJava这么好。

RxJava采用的是观察者模式,代码结构是一个响应式链式编程。

什么是观察者模式?

举个例子,警察抓小偷。法律讲究后发制人。当一个小偷还没有偷东西的时候,警察是拿他没办法的,但是警察会死死盯着他,一旦他偷了东西便立马抓获他。观察者模式也是如此。

RxJava中,也是采用观察者模式来设计的。里面有三个身份,观察者(Observer)、被观察者(Observable)、订阅(Subscribe)。其中观察者代表警察,被观察者代表小偷,两者通过订阅联系在一起。指定了这个警察每天24小时专门观察这个小偷的一举一动,如果开始偷东西,便将其抓获。

例子:

首先添加依赖

compile 'io.reactivex.rxjava2:rxjava:2.1.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
//被观察者
Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
//在这里可以做一些数据获取操作,然后将获取的数据处理之后通过onNext方法发射出去
                e.onNext("aaa");
                e.onNext("bbb");
                e.onNext("ccc");
                e.onComplete();

            }
        });

        //观察者
        Observer<String> observer = new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(String s) {
                Log.i("结果:" ,s);
                Log.i("结果:" ,s);
                Log.i("结果:" ,s);
                Log.i("结果:" ,s);
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {
                Log.i("结束啦","结束啦");
            }
        };

        //绑定
        observable.subscribe(observer);

分析上面的代码。被观察者(Observable)通过create()方法创建一个subscribe()方法,里面有个参数ObservableEmitter,这个可以称之为发射器,这个发射器有三个方法。onNext()、onComplete()、onError()。

onNext()

向Observe(观察者) onNext(Object s)方法中发射内容,观察者拿到这个内容之后可以随意操作。

onComplete():

当observable(被观察者)将数据都发送完成之后就可以使用这个方法,代表结束。observer会在onComplete()中回调。我们可以将加载dialog的结束动效放在这个里面

onError():

顾名思义,当出现问题的时候回调这个方法。

最后通过subscribe产生联系,即所谓的订阅。

一般我们在使用的时候都是采用链式结构来使用:

 Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
                //发射数据
                e.onNext("111");
                e.onNext("222");
                e.onNext("333");
                e.onComplete();
            }
        }).subscribe(new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {
                //初始化或者加载数据 
            }

            @Override
            public void onNext(String s) {
                Log.i("接受数据",s);
                Log.i("接受数据",s);
                Log.i("接受数据",s);

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {
                Log.i("接收完成","finish");
            }
        });
打开App,阅读手记
3人推荐
发表评论
随时随地看视频慕课网APP