成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

【Android】RxJava的使用(二)Action

jemygraw / 2202人閱讀

摘要:回顧在上一節(jié)的使用一基本用法中,介紹了的基本用法。它同樣只有一個(gè)方法,這個(gè)方法也無(wú)返回值,但有一個(gè)參數(shù)與同理,由于和也是單參數(shù)無(wú)返回值的,因此可以將和打包起來(lái)傳入以實(shí)現(xiàn)不完整定義的回調(diào)的使用定義三個(gè)對(duì)象,分別打包。

回顧

在上一節(jié)Android RxJava的使用(一)基本用法中,介紹了RxJava的基本用法。下面來(lái)回顧下實(shí)現(xiàn)一次RxJava的基本使用。
例:分別打印"Hello"、" World"

        Observable.just("Hello", "World")
                .subscribe(new Subscriber() {
                    @Override
                    public void onCompleted() {
                        
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(String s) {
                        Log.i(TAG, s);
                    }
                });

可以看到,我們這里只用了onNext(obj),還有兩個(gè)重寫(xiě)的onError(error)和onCompleted()并沒(méi)有用到,這樣導(dǎo)致我們多出了幾行根本用不到的代碼。于是就想能不能只寫(xiě)我們使用到的,其他幾個(gè)沒(méi)用到的就不寫(xiě),這樣的代碼看著才舒服。接下來(lái)就是使用本次的主角Action來(lái)代替Subscriber

Action

上部分的代碼使用Action來(lái)代替Subscriber得到的代碼是這樣的:

        Observable.just("Hello", "World")
                .subscribe(new Action1() {
                    @Override
                    public void call(String s) {
                        Log.i(TAG, s);
                    }
                });

舒服多了有沒(méi)有?。?/p>

什么是Action

Action是RxJava 的一個(gè)接口,常用的有Action0和Action1。

Action0: 它只有一個(gè)方法?call(),這個(gè)方法是無(wú)參無(wú)返回值的;由于?onCompleted()?方法也是無(wú)參無(wú)返回值的,因此?Action0?可以被當(dāng)成一個(gè)包裝對(duì)象,將?onCompleted()?的內(nèi)容打包起來(lái)將自己作為一個(gè)參數(shù)傳入?subscribe()?以實(shí)現(xiàn)不完整定義的回調(diào)。
Ation1:它同樣只有一個(gè)方法?call(T param),這個(gè)方法也無(wú)返回值,但有一個(gè)參數(shù);與?Action0?同理,由于?onNext(T obj)?和?onError(Throwable error)?也是單參數(shù)無(wú)返回值的,因此?Action1?可以將?onNext(obj)和?onError(error)?打包起來(lái)傳入?subscribe()?以實(shí)現(xiàn)不完整定義的回調(diào)

Action的使用

定義三個(gè)對(duì)象,分別打包onNext(obj)、onError(error)?、onCompleted()。

        Observable observable = Observable.just("Hello", "World");
        //處理onNext()中的內(nèi)容
        Action1 onNextAction = new Action1() {
            @Override
            public void call(String s) {
                Log.i(TAG, s);
            }
        };
        //處理onError()中的內(nèi)容
        Action1 onErrorAction = new Action1() {
            @Override
            public void call(Throwable throwable) {

            }
        };
        //處理onCompleted()中的內(nèi)容
        Action0 onCompletedAction = new Action0() {
            @Override
            public void call() {
                Log.i(TAG, "Completed");

            }
        };

接下來(lái)使用subscribe重載的方法

//使用 onNextAction 來(lái)定義 onNext()
Observable.just("Hello", "World").subscribe(onNextAction);
//使用 onNextAction 和 onErrorAction 來(lái)定義 onNext() 和 onError()
Observable.just("Hello", "World").subscribe(onNextAction, onErrorAction);
//使用 onNextAction、 onErrorAction 和 onCompletedAction 來(lái)定義 onNext()、 onError() 和 onCompleted()
Observable.just("Hello", "World").subscribe(onNextAction, onErrorAction, onCompletedAction);

根據(jù)實(shí)際情況使用以上的方法處理onNext(obj)、onError(error)?、onCompleted()的回調(diào)。
現(xiàn)在有個(gè)疑問(wèn),為什么使用Action也能達(dá)到使用Subscriber的結(jié)果?進(jìn)subscribe(Action1 onNext)的源碼看看。

還以為有多高深,原來(lái)就是把Action對(duì)象轉(zhuǎn)化成對(duì)應(yīng)的Subscriber對(duì)象了。這樣就不難理解為什么可以使用Action來(lái)代替Subscriber了。

重新寫(xiě)打印"Hello"、" Wrod"的方法

        Observable.just("Hello", "Wrold").subscribe(new Action1() {
            @Override
            public void call(String s) {
                Log.i(TAG, s);
            }
        });

相比第一篇那冗長(zhǎng)的代碼,現(xiàn)在感覺(jué)怎么樣?還是覺(jué)得代碼多?確實(shí),如果只是打印幾個(gè)字符串確實(shí)還是略微復(fù)雜。不急,RxJava還有其他功能呢。

小結(jié)

Action的使用為我們減少了不必要的代碼,使得寫(xiě)出的代碼看上去更加得簡(jiǎn)潔。不過(guò)就目前來(lái)看RxJava還是沒(méi)有什么優(yōu)勢(shì)值得我們?nèi)ナ褂?,下一篇我還會(huì)介紹更多RxJava的用法。慢慢得,你就會(huì)發(fā)現(xiàn)使用RxJava寫(xiě)出來(lái)的代碼看上去真的很漂亮。
更多:
更多:
Android RxJava的使用(三)轉(zhuǎn)換(map、flatMap)
Android RxJava的使用(四)線(xiàn)程控制 —— Scheduler

以上有錯(cuò)誤之處感謝指出

參考:給 Android 開(kāi)發(fā)者的 RxJava 詳解
(本文部分內(nèi)容引用自該博客)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73399.html

相關(guān)文章

  • AndroidRxJava使用(三)轉(zhuǎn)換——map、flatMap

    摘要:前兩篇的使用一基本用法的使用二介紹了的基本用法,對(duì)還不了解的請(qǐng)先看以上兩篇。這篇為大家講解中和的使用。注意對(duì)這些發(fā)射的數(shù)據(jù)做的是合并操作,因此它們可能是交錯(cuò)的。如果要保證順的的話(huà),可以使用。其他操作符除了和之外,還有其他操作符以供使用。 前兩篇Android RxJava的使用(一)基本用法、Android RxJava的使用(二)Action介紹了RxJava的基本用法,對(duì)Rxjav...

    caozhijian 評(píng)論0 收藏0
  • 扔物線(xiàn):給 Android 開(kāi)發(fā)者 RxJava 詳解

    摘要:觀察者模式面向的需求是對(duì)象觀察者對(duì)對(duì)象被觀察者的某種變化高度敏感,需要在變化的一瞬間做出反應(yīng)。規(guī)定,當(dāng)不會(huì)再有新的發(fā)出時(shí),需要觸發(fā)方法作為標(biāo)志。在事件處理過(guò)程中出異常時(shí),會(huì)被觸發(fā),同時(shí)隊(duì)列自動(dòng)終止,不允許再有事件發(fā)出。 我從去年開(kāi)始使用 RxJava ,到現(xiàn)在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的 Android 項(xiàng)目也在使用 RxJava ,并且使...

    tianren124 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<