天天看點

初識RxJava(一)建立類 操作符前言:正題:

前言:

衆所周知RxJava是個好東西,至于好在哪裡大家相信大家都看過了百度出來的第一篇文章就是 抛物線的這篇文章

《給 Android 開發者的 RxJava 詳解》

,這篇文章很好,但是像我一樣的讀得懵懵懂懂得人應該也是大有人在吧,而且是關于RxJava 1.0版本的,現在已經是Rxjava 2.0 時代了,好多東西已經發生了變化,那麼我推薦各位看這位大佬 Season_zlc 的文章,寫的賊棒,筆者是折服了 ,專題連結:

RxJava2.x

。但是筆者認為讀了這些還不夠,RxJava 還有大量的操作符需要我們進行探索,不太監了,筆者為大家帶來關于 RxJava 的各種操作符的相關筆記,共勉,共勉。

正題:

開篇一張圖,剩下的全靠編。。。而且圖還是盜圖 。╮(╯﹏╰)╭

筆者的筆記是基于 RxJava 2.0 入手,不研究源碼,因為筆者水準不夠,會用就好了嘛,嘿嘿嘿!首先,先引入依賴 :

RxJava
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
implementation 'io.reactivex.rxjava2:rxjava:2.2.3'           

1、create 基本建立符

1)、基礎寫法
//建立被觀察者
        Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {

                logDUtils("observable  onNext:1");
                emitter.onNext(1);
                logDUtils("observable  onNext:2");
                emitter.onNext(2);
                logDUtils("observable  onNext:3");
                emitter.onNext(3);
                logDUtils("observable  onNext:4");
                emitter.onNext(4);

                logDUtils("observable  onComplete");
                emitter.onComplete();

                logDUtils("observable  onNext:5");
                emitter.onNext(5);
            }
        });
        
        //建立觀察者
        Observer<Integer> observer = new Observer<Integer>() {
            @Override
            public void onSubscribe(Disposable d) {
                logDUtils("onSubscribe:" + d.toString());
            }

            @Override
            public void onNext(Integer integer) {
                logDUtils("onNext:" + integer);
            }

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

            @Override
            public void onComplete() {
                logDUtils("onComplete:");
            }
        };
        //進行訂閱
        observable.subscribe(observer);           
2)、鍊式調用
private void createMethod() {
        Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                //建立被觀察對象
                emitter.onNext(1);
                //結束發送
                emitter.onComplete();
            }
        }).subscribe(new Observer<Integer>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(Integer integer) {
            //接收被觀察對象發送的 對象
            }

            @Override
            public void onError(Throwable e) {
            //接收 onError 事件 ,做出相應反應
            }

            @Override
            public void onComplete() {
             //事件處理完成,做出相應處理
            }
        });
    }           
3)、作用

完整建立1個被觀察者對象(Observable)

屬于 RxJava 最基本的建立符

2、just 快速建立符

1)、作用

建立1個被觀察者對象

直接發送 傳入的事件(逐一發送)

最多隻能發送 10 個事件

2)、代碼

private void justMethod() {
        Observable.just(1,2,3,4,5).subscribe(new Observer<Integer>() {
            @Override
            public void onSubscribe(Disposable d) {
                logDUtils("onSubscribe:" );
            }

            @Override
            public void onNext(Integer integer) {
                logDUtils("onNext:" + integer);
            }

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

            @Override
            public void onComplete() {
                logDUtils("onComplete:");
            }
        });

    }           

3、fromeArray 發送數組内資料

1)、作用

直接發送 傳入的數組資料(逐一發送) 相當于周遊

/**
     * fromArray 操作符
     */
    private void arrayMethod() {

        String str[] = {"AAA", "BBB", "CCC", "DDD"};

        Observable.fromArray(str).subscribe(new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {
                logDUtils("onSubscribe:");
            }

            @Override
            public void onNext(String s) {
                logDUtils("onNext:" + s);
            }

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

            @Override
            public void onComplete() {
                logDUtils("onComplete:");
            }
        });
    }           
3)、效果

4、fromIterable 操作符

直接發送 傳入的集合 List 内資料(相當于周遊)

/**
     *fromIterable 操作符
     */
    private void listMethod() {
        ArrayList<String> list = new ArrayList<>();
        list.add("111");
        list.add("222");
        list.add("333");
        list.add("444");
        list.add("555");
        Observable.fromIterable(list).subscribe(new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {
                logDUtils("onSubscribe:");
            }

            @Override
            public void onNext(String s) {
                logDUtils("onNext:" + s);
            }

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

            @Override
            public void onComplete() {
                logDUtils("onComplete:");
            }
        });
    }           
3)、效果

繼續閱讀