Rxjava简单的实现

首先要想在android中使用RXjava2,先添加Gradle配置:

 

implementation 'io.reactivex.rxjava2:rxjava:2.1.16'

 

implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'

先来一个简单的Hello Word,看看是一个怎样的情况。不多说,直接上代码:

Observable.create(new ObservableOnSubscribe<String>() {//被观察者
    @Override
    public void subscribe(ObservableEmitter<String> emitter) {
        for (int i = 0; i < 4; i++) {
            Log.e(TAG, "subscribe: "+ "Hello word____"+i);
            emitter.onNext("Hello word____"+i);

        }
        emitter.onComplete();

    }
}).subscribe(new Observer<String>() {//观察者
    @Override
    public void onSubscribe(Disposable d) {
        disposable=d;
        Log.e(TAG, "onSubscribe: "+d.isDisposed());
    }

    @Override
    public void onNext(String s) {
        Log.e(TAG, "onNext: disposable  "+s+"       "+disposable.isDisposed());
    }

    @Override
    public void onError(Throwable e) {
        Log.e(TAG, "onError: "+e.getMessage());
    }

    @Override
    public void onComplete() {
        Log.e(TAG, "onComplete: ");
    }
});

运行后的结果:

07-18 14:41:17.694 3373-3373/myutil.xhh.com.myrxjavatwo E/MainActivity: onSubscribe: false
    subscribe: Hello word____0
    onNext: disposable  Hello word____0       false
    subscribe: Hello word____1
    onNext: disposable  Hello word____1       false
07-18 14:41:17.695 3373-3373/myutil.xhh.com.myrxjavatwo E/MainActivity: subscribe: Hello word____2
    onNext: disposable  Hello word____2       false
    subscribe: Hello word____3
    onNext: disposable  Hello word____3       false
    onComplete: 

从运行的结果上来看先onSubscribe()再subscribe()再到onNext()最后到onComplete();而onSubscribe()与onComplete()是一次性的 

 方法,subscribe()与onNext()在循环中多次被执行到。先来看一下onSubcribe()这个方法有什么用。可以在这个方法中看到有一个参数Disposable,那么这个参数的作用又是什么呢?通过查看源码看到这个参数实际是一个接口。代表的是一个可以支配的资源。源码如下:

当Disposable的isDisposed()是false的时候,Observer才能正常的接收数据,反之不能接收数据。而执行dispose()将isDisposed()的值改为true;onComplete()为完成的方法。onError() 这个方法不用多说都知道是错误的方法。onComplete()与onError()是互斥的,两者之间只会执行其中一个。当程序出错了,就不会完成,当程序完成了,就不会出错。

Observable与Observer两者通过subscribe()来相关连。而subscribe() 有多个重载方法,下面的是 subscribe()的不同的参数

源码就不弄上来了。其中的作用跟上面的是一样的。

Rxjava2.x 的源码地址:https://github.com/ReactiveX/RxJava

谢谢大家了,观看了。

展开阅读全文

没有更多推荐了,返回首页