【Android】RxJava的使用(二)Action

回顧

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

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

                    @Override
                    public void onError(Throwable e) {

                    }

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

可以看到,我們這里只用了onNext(obj)摆马,還有兩個重寫的onError(error)和onCompleted()并沒有用到臼闻,這樣導致我們多出了幾行根本用不到的代碼。于是就想能不能只寫我們使用到的囤采,其他幾個沒用到的就不寫述呐,這樣的代碼看著才舒服。接下來就是使用本次的主角Action來代替Subscriber

Action

上部分的代碼使用Action來代替Subscriber得到的代碼是這樣的:

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

舒服多了有沒有=短骸乓搬!

  • 什么是Action
    Action是RxJava 的一個接口,常用的有Action0和Action1代虾。

Action0: 它只有一個方法 call()进肯,這個方法是無參無返回值的;由于 onCompleted() 方法也是無參無返回值的棉磨,因此 Action0 可以被當成一個包裝對象江掩,將 onCompleted() 的內容打包起來將自己作為一個參數(shù)傳入 subscribe() 以實現(xiàn)不完整定義的回調。
Ation1:它同樣只有一個方法 call(T param)乘瓤,這個方法也無返回值环形,但有一個參數(shù);與 Action0 同理馅扣,由于 onNext(T obj) 和 onError(Throwable error) 也是單參數(shù)無返回值的斟赚,因此 Action1 可以將 onNext(obj)和 onError(error) 打包起來傳入 subscribe() 以實現(xiàn)不完整定義的回調

  • Action的使用
    定義三個對象,分別打包onNext(obj)差油、onError(error) 拗军、onCompleted()任洞。
        Observable observable = Observable.just("Hello", "World");
        //處理onNext()中的內容
        Action1<String> onNextAction = new Action1<String>() {
            @Override
            public void call(String s) {
                Log.i(TAG, s);
            }
        };
        //處理onError()中的內容
        Action1<Throwable> onErrorAction = new Action1<Throwable>() {
            @Override
            public void call(Throwable throwable) {

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

            }
        };

接下來使用subscribe重載的方法

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

根據(jù)實際情況使用以上的方法處理onNext(obj)交掏、onError(error) 、onCompleted()的回調刃鳄。
現(xiàn)在有個疑問盅弛,為什么使用Action也能達到使用Subscriber的結果?進subscribe(Action1 onNext)的源碼看看叔锐。


RxJava源碼

還以為有多高深挪鹏,原來就是把Action對象轉化成對應的Subscriber對象了。這樣就不難理解為什么可以使用Action來代替Subscriber了愉烙。

  • 重新寫打印"Hello"讨盒、" Wrod"的方法
        Observable.just("Hello", "Wrold").subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                Log.i(TAG, s);
            }
        });

相比第一篇那冗長的代碼,現(xiàn)在感覺怎么樣步责?還是覺得代碼多返顺?確實,如果只是打印幾個字符串確實還是略微復雜蔓肯。不急遂鹊,RxJava還有其他功能呢。

小結

Action的使用為我們減少了不必要的代碼蔗包,使得寫出的代碼看上去更加得簡潔秉扑。不過就目前來看RxJava還是沒有什么優(yōu)勢值得我們去使用,下一篇我還會介紹更多RxJava的用法气忠。慢慢得邻储,你就會發(fā)現(xiàn)使用RxJava寫出來的代碼看上去真的很漂亮。
更多:
更多:
Android RxJava的使用(三)轉換(map旧噪、flatMap)
Android RxJava的使用(四)線程控制 —— Scheduler

以上有錯誤之處感謝指出

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末吨娜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子淘钟,更是在濱河造成了極大的恐慌宦赠,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件米母,死亡現(xiàn)場離奇詭異勾扭,居然都是意外死亡,警方通過查閱死者的電腦和手機铁瞒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門妙色,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人慧耍,你說我怎么就攤上這事身辨∝つ保” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵煌珊,是天一觀的道長号俐。 經常有香客問我,道長定庵,這世上最難降的妖魔是什么吏饿? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮蔬浙,結果婚禮上猪落,老公的妹妹穿的比我還像新娘。我一直安慰自己畴博,他們只是感情好许布,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绎晃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杂曲。 梳的紋絲不亂的頭發(fā)上庶艾,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天,我揣著相機與錄音擎勘,去河邊找鬼咱揍。 笑死,一個胖子當著我的面吹牛棚饵,可吹牛的內容都是我干的煤裙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼噪漾,長吁一口氣:“原來是場噩夢啊……” “哼硼砰!你這毒婦竟也來了?” 一聲冷哼從身側響起欣硼,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤题翰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后诈胜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豹障,經...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年焦匈,在試婚紗的時候發(fā)現(xiàn)自己被綠了血公。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡缓熟,死狀恐怖累魔,靈堂內的尸體忽然破棺而出摔笤,到底是詐尸還是另有隱情,我是刑警寧澤薛夜,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布籍茧,位于F島的核電站,受9級特大地震影響梯澜,放射性物質發(fā)生泄漏寞冯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一晚伙、第九天 我趴在偏房一處隱蔽的房頂上張望吮龄。 院中可真熱鬧,春花似錦咆疗、人聲如沸漓帚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尝抖。三九已至,卻和暖如春迅皇,著一層夾襖步出監(jiān)牢的瞬間昧辽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工登颓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留搅荞,地道東北人。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓框咙,卻偏偏與公主長得像咕痛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子喇嘱,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內容