4章 RxJava基本響應(yīng)類型

本篇文章已授權(quán)微信公眾號 YYGeeker 獨家發(fā)布轉(zhuǎn)載請標明出處

CSDN學院課程地址

4. RxJava基本響應(yīng)類型

4.1 Observable

Observable是最基本的響應(yīng)類型恶耽,但不支持背壓珊皿,基本上適用大多數(shù)的應(yīng)用場景

有關(guān)背壓的概念等,都會在下一章介紹

public static void observable() {
    //創(chuàng)建被觀察者
    Observable.create(new ObservableOnSubscribe<String>() {
        @Override
        //默認在主線程里執(zhí)行該方法
        public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
            e.onNext("俊俊俊很帥");
            e.onNext("你值得擁有");
            e.onNext("取消關(guān)注");
            e.onNext("但還是要保持微笑");
            e.onComplete();
        }
    })
            //將被觀察者切換到子線程
            .subscribeOn(Schedulers.io())
            //將觀察者切換到主線程  需要在Android環(huán)境下運行
            //.observeOn(AndroidSchedulers.mainThread())
            //創(chuàng)建觀察者并訂閱
            .subscribe(new Observer<String>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onNext(String s) {
                    System.out.println("onNext=" + s);
                }

                @Override
                public void onError(Throwable e) {
                    System.out.println("onError=" + e.getMessage());
                }

                @Override
                public void onComplete() {
                    System.out.println("onComplete");
                }
            });
}

輸出

onNext=俊俊俊很帥
onNext=你值得擁有
onNext=取消關(guān)注
onNext=但還是要保持微笑
onComplete

4.2 Flowable

Flowable和Observable的使用基本相同,只不過Observable不支持背壓透揣,而Flowable支持背壓。但需要注意的是,使用Flowable的時候,必須調(diào)用Subscription的requsest方法請求烦感,不然上游是不會發(fā)射數(shù)據(jù)的

public static void flowable() {
    //創(chuàng)建被觀察者
    Flowable.create(new FlowableOnSubscribe<String>() {
        @Override
        public void subscribe(FlowableEmitter<String> e) throws Exception {
            e.onNext("俊俊俊很帥");
            e.onNext("你值得擁有");
            e.onNext("取消關(guān)注");
            e.onNext("但還是要保持微笑");
            e.onComplete();
        }
    }, BackpressureStrategy.DROP)
            //將被觀察者切換到子線程
            .subscribeOn(Schedulers.io())
            //將觀察者切換到主線程  需要在Android環(huán)境下運行
            //.observeOn(AndroidSchedulers.mainThread())
            //創(chuàng)建觀察者并訂閱
            .subscribe(new Subscriber<String>() {
                @Override
                public void onSubscribe(Subscription s) {
                    s.request(2);
                }

                @Override
                public void onNext(String s) {
                    System.out.println("onNext=" + s);
                }

                @Override
                public void onError(Throwable t) {
                    System.out.println("onError=" + t.getMessage());
                }

                @Override
                public void onComplete() {
                    System.out.println("onComplete");
                }
            });
}

輸出

onNext=俊俊俊很帥
onNext=你值得擁有

4.3 Single

Single只發(fā)射一個元素,發(fā)射onSuccessonError方法膛堤,所以沒有complete方法手趣,不像Observable或者Flowable,數(shù)據(jù)發(fā)射完成之后骑祟,需要調(diào)用complete告訴下游已經(jīng)完成

public static void single() {
    //創(chuàng)建被觀察者
    Single.create(new SingleOnSubscribe<String>() {
        @Override
        public void subscribe(SingleEmitter<String> e) throws Exception {
            e.onSuccess("success");
        }
    })
            //將被觀察者切換到子線程
            .subscribeOn(Schedulers.io())
            //將觀察者切換到主線程  需要在Android環(huán)境下運行
            //.observeOn(AndroidSchedulers.mainThread())
            //創(chuàng)建觀察者并訂閱
            .subscribe(new SingleObserver<String>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onSuccess(String s) {
                    System.out.println("onSuccess=" + s);
                }

                @Override
                public void onError(Throwable e) {
                    System.out.println("onError=" + e.getMessage());
                }
            });
}

輸出

onSuccess=success

4.4 Completable

Completable不會發(fā)射數(shù)據(jù)回懦,只會給下游發(fā)送一個信號〈纹螅回調(diào)onCompleteonError方法

public static void completable() {
    //創(chuàng)建被觀察者
    Completable.create(new CompletableOnSubscribe() {
        @Override
        public void subscribe(CompletableEmitter e) throws Exception {
            e.onComplete();
        }
    })
            //將被觀察者切換到子線程
            .subscribeOn(Schedulers.io())
            //將觀察者切換到主線程  需要在Android環(huán)境下運行
            //.observeOn(AndroidSchedulers.mainThread())
            //創(chuàng)建觀察者并訂閱
            .subscribe(new CompletableObserver() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onComplete() {
                    System.out.println("onComplete");

                }

                @Override
                public void onError(Throwable e) {
                    System.out.println("onError=" + e.getMessage());
                }
            });
}

輸出

onComplete

4.5 Maybe

Maybe是Single和Completable的結(jié)合怯晕,需要注意的是onSuccess和onComplete方法只會執(zhí)行其中一個,這不同于Observable和Flowable最后是以onComplete()結(jié)尾

public static void maybe() {
    //創(chuàng)建被觀察者
    Maybe.create(new MaybeOnSubscribe<String>() {
        @Override
        public void subscribe(MaybeEmitter<String> e) throws Exception {
            e.onSuccess("success");
            e.onComplete();
        }
    })
            //將被觀察者切換到子線程
            .subscribeOn(Schedulers.io())
            //將觀察者切換到主線程  需要在Android環(huán)境下運行
            //.observeOn(AndroidSchedulers.mainThread())
            //創(chuàng)建觀察者并訂閱
            .subscribe(new MaybeObserver<String>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onSuccess(String s) {
                    System.out.println("onSuccess=" + s);
                }

                @Override
                public void onError(Throwable e) {
                    System.out.println("onError=" + e.getMessage());
                }

                @Override
                public void onComplete() {
                    System.out.println("onComplete");
                }
            });
}

輸出

onSuccess=success

4.6 小結(jié)

  1. Observable:最基本的響應(yīng)類型缸棵,不支持背壓
  2. Flowable:最基本的響應(yīng)類型舟茶,支持背壓
  3. Single:只發(fā)射一個數(shù)據(jù)的響應(yīng)類型
  4. Completable:只發(fā)射一個信號的響應(yīng)類型
  5. Maybe:Single和Completable的結(jié)合體
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市堵第,隨后出現(xiàn)的幾起案子吧凉,更是在濱河造成了極大的恐慌,老刑警劉巖踏志,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阀捅,死亡現(xiàn)場離奇詭異,居然都是意外死亡针余,警方通過查閱死者的電腦和手機饲鄙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來圆雁,“玉大人忍级,你說我怎么就攤上這事∥毙啵” “怎么了轴咱?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長烈涮。 經(jīng)常有香客問我朴肺,道長,這世上最難降的妖魔是什么坚洽? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任宇挫,我火速辦了婚禮,結(jié)果婚禮上酪术,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好绘雁,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布橡疼。 她就那樣靜靜地躺著,像睡著了一般庐舟。 火紅的嫁衣襯著肌膚如雪欣除。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天挪略,我揣著相機與錄音历帚,去河邊找鬼。 笑死杠娱,一個胖子當著我的面吹牛挽牢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播摊求,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼禽拔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了室叉?” 一聲冷哼從身側(cè)響起睹栖,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茧痕,沒想到半個月后野来,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡踪旷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年曼氛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片埃脏。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡搪锣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出彩掐,到底是詐尸還是另有隱情构舟,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布堵幽,位于F島的核電站狗超,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏朴下。R本人自食惡果不足惜努咐,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望殴胧。 院中可真熱鬧渗稍,春花似錦佩迟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拱燃,卻和暖如春秉溉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背碗誉。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工召嘶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哮缺。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓弄跌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蝴蜓。 傳聞我的和親對象是個殘疾皇子碟绑,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

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