摘要:回顧在上一節(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)容 Action1onNextAction = 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
摘要:前兩篇的使用一基本用法的使用二介紹了的基本用法,對(duì)還不了解的請(qǐng)先看以上兩篇。這篇為大家講解中和的使用。注意對(duì)這些發(fā)射的數(shù)據(jù)做的是合并操作,因此它們可能是交錯(cuò)的。如果要保證順的的話(huà),可以使用。其他操作符除了和之外,還有其他操作符以供使用。 前兩篇Android RxJava的使用(一)基本用法、Android RxJava的使用(二)Action介紹了RxJava的基本用法,對(duì)Rxjav...
摘要:觀察者模式面向的需求是對(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 ,并且使...
閱讀 1256·2023-04-26 02:38
閱讀 1538·2021-11-22 09:34
閱讀 1232·2021-09-26 10:19
閱讀 3282·2019-08-29 17:15
閱讀 3600·2019-08-29 12:27
閱讀 1779·2019-08-26 13:51
閱讀 1916·2019-08-26 13:47
閱讀 1075·2019-08-26 12:20