RxJava使用(一)基础使用

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");
            }
        });

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值