Carson帶你學(xué)Android:RxJava創(chuàng)建操作符

前言

Rxjava磺陡,由于其基于事件流的鏈?zhǔn)秸{(diào)用沼本、邏輯簡(jiǎn)潔 & 使用簡(jiǎn)單的特點(diǎn),深受各大 Android開(kāi)發(fā)者的歡迎薪捍。

如果還不了解 RxJava笼痹,請(qǐng)看文章:Android:這是一篇 清晰 & 易懂的Rxjava 入門(mén)教程

  • RxJava如此受歡迎的原因,在于其提供了豐富 & 功能強(qiáng)大的操作符酪穿,幾乎能完成所有的功能需求
  • 今天凳干,我將為大家詳細(xì)介紹RxJava操作符中最常用的創(chuàng)建操作符,并附帶 Retrofit 結(jié)合 RxJava的實(shí)例Demo教學(xué)被济,希望你們會(huì)喜歡救赐。

Carson帶你學(xué)RxJava系列文章,包括 原理只磷、操作符经磅、應(yīng)用場(chǎng)景、背壓等等钮追,請(qǐng)關(guān)注看文章:Android:這是一份全面 & 詳細(xì)的RxJava學(xué)習(xí)指南


目錄

示意圖

1. 作用

創(chuàng)建 被觀察者( Observable) 對(duì)象 & 發(fā)送事件预厌。


2. 類(lèi)型

  • 創(chuàng)建操作符包括如下:
示意圖
  • 下面,我將對(duì)每個(gè)操作符進(jìn)行詳細(xì)介紹

3. 應(yīng)用場(chǎng)景 & 對(duì)應(yīng)操作符 介紹

注:在使用RxJava 2操作符前元媚,記得在項(xiàng)目的Gradle中添加依賴(lài):

dependencies {
      compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
      compile 'io.reactivex.rxjava2:rxjava:2.0.7'
      // 注:RxJava2 與 RxJava1 不能共存轧叽,即依賴(lài)不能同時(shí)存在
}

3.1 基本創(chuàng)建

  • 需求場(chǎng)景
    完整的創(chuàng)建被觀察者對(duì)象

  • 對(duì)應(yīng)操作符類(lèi)型

create()

  • 作用
    完整創(chuàng)建1個(gè)被觀察者對(duì)象(Observable

RxJava 中創(chuàng)建被觀察者對(duì)象最基本的操作符

  • 具體使用
/ **
   * 1. 通過(guò)creat()創(chuàng)建被觀察者 Observable 對(duì)象
   */ 
        Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
          // 傳入?yún)?shù): OnSubscribe 對(duì)象
          // 當(dāng) Observable 被訂閱時(shí),OnSubscribe 的 call() 方法會(huì)自動(dòng)被調(diào)用刊棕,即事件序列就會(huì)依照設(shè)定依次被觸發(fā)
          // 即觀察者會(huì)依次調(diào)用對(duì)應(yīng)事件的復(fù)寫(xiě)方法從而響應(yīng)事件
          // 從而實(shí)現(xiàn)由被觀察者向觀察者的事件傳遞 & 被觀察者調(diào)用了觀察者的回調(diào)方法 炭晒,即觀察者模式
/ **
   * 2. 在復(fù)寫(xiě)的subscribe()里定義需要發(fā)送的事件
   */ 
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                // 通過(guò) ObservableEmitter類(lèi)對(duì)象 產(chǎn)生 & 發(fā)送事件
                // ObservableEmitter類(lèi)介紹
                    // a. 定義:事件發(fā)射器
                    // b. 作用:定義需要發(fā)送的事件 & 向觀察者發(fā)送事件
                   // 注:建議發(fā)送事件前檢查觀察者的isUnsubscribed狀態(tài),以便在沒(méi)有觀察者時(shí)甥角,讓Observable停止發(fā)射數(shù)據(jù)
                    if (!observer.isUnsubscribed()) {
                           emitter.onNext(1);
                           emitter.onNext(2);
                           emitter.onNext(3);
                }
                emitter.onComplete();
            }
        });

// 至此网严,一個(gè)完整的被觀察者對(duì)象(Observable)就創(chuàng)建完畢了。


在具體使用時(shí)嗤无,一般采用 鏈?zhǔn)秸{(diào)用 來(lái)創(chuàng)建

        // 1. 通過(guò)creat()創(chuàng)建被觀察者對(duì)象
        Observable.create(new ObservableOnSubscribe<Integer>() {

            // 2. 在復(fù)寫(xiě)的subscribe()里定義需要發(fā)送的事件
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {

                    emitter.onNext(1);
                    emitter.onNext(2);
                    emitter.onNext(3);

                emitter.onComplete();
            }  // 至此震束,一個(gè)被觀察者對(duì)象(Observable)就創(chuàng)建完畢
        }).subscribe(new Observer<Integer>() {
            // 以下步驟僅為展示一個(gè)完整demo,可以忽略
            // 3. 通過(guò)通過(guò)訂閱(subscribe)連接觀察者和被觀察者
            // 4. 創(chuàng)建觀察者 & 定義響應(yīng)事件的行為
            @Override
            public void onSubscribe(Disposable d) {
                Log.d(TAG, "開(kāi)始采用subscribe連接");
            }
            // 默認(rèn)最先調(diào)用復(fù)寫(xiě)的 onSubscribe()

            @Override
            public void onNext(Integer value) {
                Log.d(TAG, "接收到了事件"+ value  );
            }

            @Override
            public void onError(Throwable e) {
                Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
            }

            @Override
            public void onComplete() {
                Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
            }

        });
    }

  • 測(cè)試結(jié)果
示意圖

3.2 快速創(chuàng)建 & 發(fā)送事件

  • 需求場(chǎng)景
    快速的創(chuàng)建被觀察者對(duì)象

  • 對(duì)應(yīng)操作符類(lèi)型

just()

  • 作用
    1. 快速創(chuàng)建1個(gè)被觀察者對(duì)象(Observable
    2. 發(fā)送事件的特點(diǎn):直接發(fā)送 傳入的事件

注:最多只能發(fā)送10個(gè)參數(shù)

  • 應(yīng)用場(chǎng)景
    快速創(chuàng)建 被觀察者對(duì)象(Observable) & 發(fā)送10個(gè)以下事件

  • 具體使用

        // 1. 創(chuàng)建時(shí)傳入整型1翁巍、2驴一、3、4
        // 在創(chuàng)建后就會(huì)發(fā)送這些對(duì)象灶壶,相當(dāng)于執(zhí)行了onNext(1)肝断、onNext(2)、onNext(3)、onNext(4)
        Observable.just(1, 2, 3,4)   
            // 至此胸懈,一個(gè)Observable對(duì)象創(chuàng)建完畢担扑,以下步驟僅為展示一個(gè)完整demo,可以忽略
            // 2. 通過(guò)通過(guò)訂閱(subscribe)連接觀察者和被觀察者
            // 3. 創(chuàng)建觀察者 & 定義響應(yīng)事件的行為
         .subscribe(new Observer<Integer>() {
            
            @Override
            public void onSubscribe(Disposable d) {
                Log.d(TAG, "開(kāi)始采用subscribe連接");
            }
            // 默認(rèn)最先調(diào)用復(fù)寫(xiě)的 onSubscribe()

            @Override
            public void onNext(Integer value) {
                Log.d(TAG, "接收到了事件"+ value  );
            }

            @Override
            public void onError(Throwable e) {
                Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
            }

            @Override
            public void onComplete() {
                Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
            }

        });
    }
  • 測(cè)試結(jié)果
示意圖

fromArray()

  • 作用
    1. 快速創(chuàng)建1個(gè)被觀察者對(duì)象(Observable
    2. 發(fā)送事件的特點(diǎn):直接發(fā)送 傳入的數(shù)組數(shù)據(jù)

會(huì)將數(shù)組中的數(shù)據(jù)轉(zhuǎn)換為Observable對(duì)象

  • 應(yīng)用場(chǎng)景

    1. 快速創(chuàng)建 被觀察者對(duì)象(Observable) & 發(fā)送10個(gè)以上事件(數(shù)組形式)
    2. 數(shù)組元素遍歷
  • 具體使用

      // 1. 設(shè)置需要傳入的數(shù)組
     Integer[] items = { 0, 1, 2, 3, 4 };

        // 2. 創(chuàng)建被觀察者對(duì)象(Observable)時(shí)傳入數(shù)組
        // 在創(chuàng)建后就會(huì)將該數(shù)組轉(zhuǎn)換成Observable & 發(fā)送該對(duì)象中的所有數(shù)據(jù)
        Observable.fromArray(items) 
        .subscribe(new Observer<Integer>() {
            @Override
            public void onSubscribe(Disposable d) {
                Log.d(TAG, "開(kāi)始采用subscribe連接");
            }

            @Override
            public void onNext(Integer value) {
                Log.d(TAG, "接收到了事件"+ value  );
            }

            @Override
            public void onError(Throwable e) {
                Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
            }

            @Override
            public void onComplete() {
                Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
            }

        });
    }

// 注:
// 可發(fā)送10個(gè)以上參數(shù)
// 若直接傳遞一個(gè)list集合進(jìn)去趣钱,否則會(huì)直接把list當(dāng)做一個(gè)數(shù)據(jù)元素發(fā)送

/*
  * 數(shù)組遍歷
  **/
        // 1. 設(shè)置需要傳入的數(shù)組
        Integer[] items = { 0, 1, 2, 3, 4 };

        // 2. 創(chuàng)建被觀察者對(duì)象(Observable)時(shí)傳入數(shù)組
        // 在創(chuàng)建后就會(huì)將該數(shù)組轉(zhuǎn)換成Observable & 發(fā)送該對(duì)象中的所有數(shù)據(jù)
        Observable.fromArray(items)
                .subscribe(new Observer<Integer>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d(TAG, "數(shù)組遍歷");
                    }

                    @Override
                    public void onNext(Integer value) {
                        Log.d(TAG, "數(shù)組中的元素 = "+ value  );
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "遍歷結(jié)束");
                    }

                });

  • 測(cè)試結(jié)果
發(fā)送事件
數(shù)組遍歷

fromIterable()

  • 作用
    1. 快速創(chuàng)建1個(gè)被觀察者對(duì)象(Observable
    2. 發(fā)送事件的特點(diǎn):直接發(fā)送 傳入的集合List數(shù)據(jù)

會(huì)將數(shù)組中的數(shù)據(jù)轉(zhuǎn)換為Observable對(duì)象

  • 應(yīng)用場(chǎng)景

    1. 快速創(chuàng)建 被觀察者對(duì)象(Observable) & 發(fā)送10個(gè)以上事件(集合形式)
    2. 集合元素遍歷
  • 具體使用

/*
 * 快速發(fā)送集合
 **/
// 1. 設(shè)置一個(gè)集合
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);

// 2. 通過(guò)fromIterable()將集合中的對(duì)象 / 數(shù)據(jù)發(fā)送出去
        Observable.fromIterable(list)
                .subscribe(new Observer<Integer>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d(TAG, "開(kāi)始采用subscribe連接");
                    }

                    @Override
                    public void onNext(Integer value) {
                        Log.d(TAG, "接收到了事件"+ value  );
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
                    }
                });


/*
 * 集合遍歷
 **/
        // 1. 設(shè)置一個(gè)集合
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);

        // 2. 通過(guò)fromIterable()將集合中的對(duì)象 / 數(shù)據(jù)發(fā)送出去
        Observable.fromIterable(list)
                .subscribe(new Observer<Integer>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d(TAG, "集合遍歷");
                    }

                    @Override
                    public void onNext(Integer value) {
                        Log.d(TAG, "集合中的數(shù)據(jù)元素 = "+ value  );
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "遍歷結(jié)束");
                    }
                });
  • 測(cè)試結(jié)果
發(fā)送集合
集合遍歷

額外

// 下列方法一般用于測(cè)試使用

<-- empty()  -->
// 該方法創(chuàng)建的被觀察者對(duì)象發(fā)送事件的特點(diǎn):僅發(fā)送Complete事件涌献,直接通知完成
Observable observable1=Observable.empty(); 
// 即觀察者接收后會(huì)直接調(diào)用onCompleted()

<-- error()  -->
// 該方法創(chuàng)建的被觀察者對(duì)象發(fā)送事件的特點(diǎn):僅發(fā)送Error事件,直接通知異常
// 可自定義異常
Observable observable2=Observable.error(new RuntimeException())
// 即觀察者接收后會(huì)直接調(diào)用onError()

<-- never()  -->
// 該方法創(chuàng)建的被觀察者對(duì)象發(fā)送事件的特點(diǎn):不發(fā)送任何事件
Observable observable3=Observable.never();
// 即觀察者接收后什么都不調(diào)用


3.3 延遲創(chuàng)建

  • 需求場(chǎng)景
    1. 定時(shí)操作:在經(jīng)過(guò)了x秒后首有,需要自動(dòng)執(zhí)行y操作
    2. 周期性操作:每隔x秒后燕垃,需要自動(dòng)執(zhí)行y操作

defer()

  • 作用
    直到有觀察者(Observer )訂閱時(shí),才動(dòng)態(tài)創(chuàng)建被觀察者對(duì)象(Observable) & 發(fā)送事件
  1. 通過(guò) Observable工廠(chǎng)方法創(chuàng)建被觀察者對(duì)象(Observable
  2. 每次訂閱后井联,都會(huì)得到一個(gè)剛創(chuàng)建的最新的Observable對(duì)象卜壕,這可以確保Observable對(duì)象里的數(shù)據(jù)是最新的
  • 應(yīng)用場(chǎng)景
    動(dòng)態(tài)創(chuàng)建被觀察者對(duì)象(Observable) & 獲取最新的Observable對(duì)象數(shù)據(jù)

  • 具體使用

       <-- 1. 第1次對(duì)i賦值 ->>
        Integer i = 10;

        // 2. 通過(guò)defer 定義被觀察者對(duì)象
        // 注:此時(shí)被觀察者對(duì)象還沒(méi)創(chuàng)建
        Observable<Integer> observable = Observable.defer(new Callable<ObservableSource<? extends Integer>>() {
            @Override
            public ObservableSource<? extends Integer> call() throws Exception {
                return Observable.just(i);
            }
        });

        <-- 2. 第2次對(duì)i賦值 ->>
        i = 15;

        <-- 3. 觀察者開(kāi)始訂閱 ->>
        // 注:此時(shí),才會(huì)調(diào)用defer()創(chuàng)建被觀察者對(duì)象(Observable)
        observable.subscribe(new Observer<Integer>() {

            @Override
            public void onSubscribe(Disposable d) {
                Log.d(TAG, "開(kāi)始采用subscribe連接");
            }

            @Override
            public void onNext(Integer value) {
                Log.d(TAG, "接收到的整數(shù)是"+ value  );
            }

            @Override
            public void onError(Throwable e) {
                Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
            }

            @Override
            public void onComplete() {
                Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
            }
        });
  • 測(cè)試結(jié)果

因?yàn)槭窃谟嗛啎r(shí)才創(chuàng)建烙常,所以i值會(huì)取第2次的賦值


示意圖

timer()

  • 作用
    1. 快速創(chuàng)建1個(gè)被觀察者對(duì)象(Observable
    2. 發(fā)送事件的特點(diǎn):延遲指定時(shí)間后轴捎,發(fā)送1個(gè)數(shù)值0(Long類(lèi)型)

本質(zhì) = 延遲指定時(shí)間后,調(diào)用一次 onNext(0)

  • 應(yīng)用場(chǎng)景
    延遲指定事件蚕脏,發(fā)送一個(gè)0侦副,一般用于檢測(cè)
  • 具體使用
        // 該例子 = 延遲2s后,發(fā)送一個(gè)long類(lèi)型數(shù)值
        Observable.timer(2, TimeUnit.SECONDS) 
                  .subscribe(new Observer<Long>() {
            @Override
            public void onSubscribe(Disposable d) {
                Log.d(TAG, "開(kāi)始采用subscribe連接");
            }

            @Override
            public void onNext(Long value) {
                Log.d(TAG, "接收到了事件"+ value  );
            }

            @Override
            public void onError(Throwable e) {
                Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
            }

            @Override
            public void onComplete() {
                Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
            }

        });

// 注:timer操作符默認(rèn)運(yùn)行在一個(gè)新線(xiàn)程上
// 也可自定義線(xiàn)程調(diào)度器(第3個(gè)參數(shù)):timer(long,TimeUnit,Scheduler) 
  • 測(cè)試結(jié)果
示意圖

interval()

  • 作用
    1. 快速創(chuàng)建1個(gè)被觀察者對(duì)象(Observable
    2. 發(fā)送事件的特點(diǎn):每隔指定時(shí)間 就發(fā)送 事件

發(fā)送的事件序列 = 從0開(kāi)始驼鞭、無(wú)限遞增1的的整數(shù)序列

  • 具體使用
       // 參數(shù)說(shuō)明:
        // 參數(shù)1 = 第1次延遲時(shí)間秦驯;
        // 參數(shù)2 = 間隔時(shí)間數(shù)字;
        // 參數(shù)3 = 時(shí)間單位终议;
        Observable.interval(3,1,TimeUnit.SECONDS)
                // 該例子發(fā)送的事件序列特點(diǎn):延遲3s后發(fā)送事件汇竭,每隔1秒產(chǎn)生1個(gè)數(shù)字(從0開(kāi)始遞增1葱蝗,無(wú)限個(gè))
                .subscribe(new Observer<Long>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d(TAG, "開(kāi)始采用subscribe連接");
                    }
                    // 默認(rèn)最先調(diào)用復(fù)寫(xiě)的 onSubscribe()

                    @Override
                    public void onNext(Long value) {
                        Log.d(TAG, "接收到了事件"+ value  );
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
                    }

                });

// 注:interval默認(rèn)在computation調(diào)度器上執(zhí)行
// 也可自定義指定線(xiàn)程調(diào)度器(第3個(gè)參數(shù)):interval(long,TimeUnit,Scheduler)
  • 測(cè)試結(jié)果
示意圖

intervalRange()

  • 作用
    1. 快速創(chuàng)建1個(gè)被觀察者對(duì)象(Observable
    2. 發(fā)送事件的特點(diǎn):每隔指定時(shí)間 就發(fā)送 事件穴张,可指定發(fā)送的數(shù)據(jù)的數(shù)量

a. 發(fā)送的事件序列 = 從0開(kāi)始、無(wú)限遞增1的的整數(shù)序列
b. 作用類(lèi)似于interval()两曼,但可指定發(fā)送的數(shù)據(jù)的數(shù)量

  • 具體使用
// 參數(shù)說(shuō)明:
        // 參數(shù)1 = 事件序列起始點(diǎn)皂甘;
        // 參數(shù)2 = 事件數(shù)量;
        // 參數(shù)3 = 第1次事件延遲發(fā)送時(shí)間悼凑;
        // 參數(shù)4 = 間隔時(shí)間數(shù)字偿枕;
        // 參數(shù)5 = 時(shí)間單位
        Observable.intervalRange(3,10,2, 1, TimeUnit.SECONDS)
                // 該例子發(fā)送的事件序列特點(diǎn):
                // 1. 從3開(kāi)始,一共發(fā)送10個(gè)事件户辫;
                // 2. 第1次延遲2s發(fā)送渐夸,之后每隔2秒產(chǎn)生1個(gè)數(shù)字(從0開(kāi)始遞增1,無(wú)限個(gè))
                .subscribe(new Observer<Long>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d(TAG, "開(kāi)始采用subscribe連接");
                    }
                    // 默認(rèn)最先調(diào)用復(fù)寫(xiě)的 onSubscribe()

                    @Override
                    public void onNext(Long value) {
                        Log.d(TAG, "接收到了事件"+ value  );
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
                    }

                });
  • 測(cè)試結(jié)果
示意圖

range()

  • 作用
    1. 快速創(chuàng)建1個(gè)被觀察者對(duì)象(Observable
    2. 發(fā)送事件的特點(diǎn):連續(xù)發(fā)送 1個(gè)事件序列渔欢,可指定范圍

a. 發(fā)送的事件序列 = 從0開(kāi)始墓塌、無(wú)限遞增1的的整數(shù)序列
b. 作用類(lèi)似于intervalRange(),但區(qū)別在于:無(wú)延遲發(fā)送事件

  • 具體使用

// 參數(shù)說(shuō)明:
        // 參數(shù)1 = 事件序列起始點(diǎn);
        // 參數(shù)2 = 事件數(shù)量苫幢;
        // 注:若設(shè)置為負(fù)數(shù)访诱,則會(huì)拋出異常
        Observable.range(3,10)
                // 該例子發(fā)送的事件序列特點(diǎn):從3開(kāi)始發(fā)送,每次發(fā)送事件遞增1韩肝,一共發(fā)送10個(gè)事件
                .subscribe(new Observer<Integer>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d(TAG, "開(kāi)始采用subscribe連接");
                    }
                    // 默認(rèn)最先調(diào)用復(fù)寫(xiě)的 onSubscribe()

                    @Override
                    public void onNext(Integer value) {
                        Log.d(TAG, "接收到了事件"+ value  );
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
                    }

                });

  • 測(cè)試結(jié)果
示意圖

rangeLong()

  • 作用:類(lèi)似于range()触菜,區(qū)別在于該方法支持?jǐn)?shù)據(jù)類(lèi)型 = Long
  • 具體使用
    range()類(lèi)似,此處不作過(guò)多描述

至此哀峻,關(guān)于 RxJava2中的創(chuàng)建操作符講解完畢涡相。


4. 實(shí)際開(kāi)發(fā)需求案例

  • 下面,我將講解創(chuàng)建操作符的1個(gè)常見(jiàn)實(shí)際需求案例:網(wǎng)絡(luò)請(qǐng)求輪詢(xún)
  • 該例子將結(jié)合RetrofitRxJava 進(jìn)行講解

具體請(qǐng)看文章:Android RxJava 實(shí)際應(yīng)用案例講解:網(wǎng)絡(luò)請(qǐng)求輪詢(xún)


5. Demo地址

上述所有的Demo源代碼都存放在:Carson_Ho的Github地址:RxJava2_創(chuàng)建操作符

喜歡的麻煩點(diǎn)個(gè)star剩蟀!


6. 總結(jié)

  • 下面漾峡,我將用1張圖總結(jié) RxJava2 中常用的創(chuàng)建操作符
示意圖
  • Carson帶你學(xué)RxJava系列文章:

入門(mén)
Carson帶你學(xué)Android:這是一篇清晰易懂的Rxjava入門(mén)教程
Carson帶你學(xué)Android:面向初學(xué)者的RxJava使用指南
Carson帶你學(xué)Android:RxJava2.0到底更新了什么?
原理
Carson帶你學(xué)Android:圖文解析RxJava原理
Carson帶你學(xué)Android:手把手帶你源碼分析RxJava
使用教程:操作符
Carson帶你學(xué)Android:RxJava操作符教程
Carson帶你學(xué)Android:RxJava創(chuàng)建操作符
Carson帶你學(xué)Android:RxJava功能性操作符
Carson帶你學(xué)Android:RxJava過(guò)濾操作符
Carson帶你學(xué)Android:RxJava組合/合并操作符
Carson帶你學(xué)Android:RxJava變換操作符
Carson帶你學(xué)Android:RxJava條件/布爾操作符
實(shí)戰(zhàn)
Carson帶你學(xué)Android:什么時(shí)候應(yīng)該使用Rxjava喻旷?(開(kāi)發(fā)場(chǎng)景匯總)
Carson帶你學(xué)Android:RxJava線(xiàn)程控制(含實(shí)例講解)
Carson帶你學(xué)Android:圖文詳解RxJava背壓策略
Carson帶你學(xué)Android:RxJava生逸、Retrofit聯(lián)合使用匯總(含實(shí)例教程)
Carson帶你學(xué)Android:優(yōu)雅實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求嵌套回調(diào)
Carson帶你學(xué)Android:網(wǎng)絡(luò)請(qǐng)求輪詢(xún)(有條件)
Carson帶你學(xué)Android:網(wǎng)絡(luò)請(qǐng)求輪詢(xún)(無(wú)條件)
Carson帶你學(xué)Android:網(wǎng)絡(luò)請(qǐng)求出錯(cuò)重連(結(jié)合Retrofit)
Carson帶你學(xué)Android:合并數(shù)據(jù)源
Carson帶你學(xué)Android:聯(lián)想搜索優(yōu)化
Carson帶你學(xué)Android:功能防抖
Carson帶你學(xué)Android:從磁盤(pán)/內(nèi)存緩存中獲取緩存數(shù)據(jù)
Carson帶你學(xué)Android:聯(lián)合判斷


歡迎關(guān)注Carson_Ho的簡(jiǎn)書(shū)

不定期分享關(guān)于安卓開(kāi)發(fā)的干貨,追求短且预、平槽袄、快,但卻不缺深度锋谐。


請(qǐng)點(diǎn)贊遍尺!因?yàn)槟愕墓膭?lì)是我寫(xiě)作的最大動(dòng)力!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涮拗,一起剝皮案震驚了整個(gè)濱河市乾戏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌三热,老刑警劉巖鼓择,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異就漾,居然都是意外死亡呐能,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)抑堡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)摆出,“玉大人,你說(shuō)我怎么就攤上這事首妖≠寺” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵有缆,是天一觀的道長(zhǎng)象踊。 經(jīng)常有香客問(wèn)我舌仍,道長(zhǎng),這世上最難降的妖魔是什么通危? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任铸豁,我火速辦了婚禮,結(jié)果婚禮上菊碟,老公的妹妹穿的比我還像新娘节芥。我一直安慰自己,他們只是感情好逆害,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布头镊。 她就那樣靜靜地躺著,像睡著了一般魄幕。 火紅的嫁衣襯著肌膚如雪相艇。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天纯陨,我揣著相機(jī)與錄音坛芽,去河邊找鬼。 笑死翼抠,一個(gè)胖子當(dāng)著我的面吹牛咙轩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播阴颖,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼活喊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了量愧?” 一聲冷哼從身側(cè)響起钾菊,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎偎肃,沒(méi)想到半個(gè)月后煞烫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡软棺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年红竭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喘落。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖最冰,靈堂內(nèi)的尸體忽然破棺而出瘦棋,到底是詐尸還是另有隱情,我是刑警寧澤暖哨,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布赌朋,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏沛慢。R本人自食惡果不足惜赡若,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望团甲。 院中可真熱鬧逾冬,春花似錦、人聲如沸躺苦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)匹厘。三九已至嘀趟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間愈诚,已是汗流浹背她按。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炕柔,地道東北人尤溜。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像汗唱,于是被迫代替她去往敵國(guó)和親宫莱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容