摘要:回顧在上一節(jié)的使用一基本用法中,介紹了的基本用法。它同樣只有一個(gè)方法,這個(gè)方法也無返回值,但有一個(gè)參數(shù)與同理,由于和也是單參數(shù)無返回值的,因此可以將和打包起來傳入以實(shí)現(xiàn)不完整定義的回調(diào)的使用定義三個(gè)對(duì)象,分別打包。
回顧
在上一節(jié)Android RxJava的使用(一)基本用法中,介紹了RxJava的基本用法。下面來回顧下實(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è)重寫的onError(error)和onCompleted()并沒有用到,這樣導(dǎo)致我們多出了幾行根本用不到的代碼。于是就想能不能只寫我們使用到的,其他幾個(gè)沒用到的就不寫,這樣的代碼看著才舒服。接下來就是使用本次的主角Action來代替Subscriber
Action上部分的代碼使用Action來代替Subscriber得到的代碼是這樣的:
Observable.just("Hello", "World") .subscribe(new Action1() { @Override public void call(String s) { Log.i(TAG, s); } });
舒服多了有沒有??!
什么是Action
Action是RxJava 的一個(gè)接口,常用的有Action0和Action1。
Action0: 它只有一個(gè)方法?call(),這個(gè)方法是無參無返回值的;由于?onCompleted()?方法也是無參無返回值的,因此?Action0?可以被當(dāng)成一個(gè)包裝對(duì)象,將?onCompleted()?的內(nèi)容打包起來將自己作為一個(gè)參數(shù)傳入?subscribe()?以實(shí)現(xiàn)不完整定義的回調(diào)。
Ation1:它同樣只有一個(gè)方法?call(T param),這個(gè)方法也無返回值,但有一個(gè)參數(shù);與?Action0?同理,由于?onNext(T obj)?和?onError(Throwable error)?也是單參數(shù)無返回值的,因此?Action1?可以將?onNext(obj)和?onError(error)?打包起來傳入?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"); } };
接下來使用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ù)實(shí)際情況使用以上的方法處理onNext(obj)、onError(error)?、onCompleted()的回調(diào)。
現(xiàn)在有個(gè)疑問,為什么使用Action也能達(dá)到使用Subscriber的結(jié)果?進(jìn)subscribe(Action1 onNext)的源碼看看。
還以為有多高深,原來就是把Action對(duì)象轉(zhuǎn)化成對(duì)應(yīng)的Subscriber對(duì)象了。這樣就不難理解為什么可以使用Action來代替Subscriber了。
重新寫打印"Hello"、" Wrod"的方法
Observable.just("Hello", "Wrold").subscribe(new Action1() { @Override public void call(String s) { Log.i(TAG, s); } });
相比第一篇那冗長的代碼,現(xiàn)在感覺怎么樣?還是覺得代碼多?確實(shí),如果只是打印幾個(gè)字符串確實(shí)還是略微復(fù)雜。不急,RxJava還有其他功能呢。
小結(jié)Action的使用為我們減少了不必要的代碼,使得寫出的代碼看上去更加得簡潔。不過就目前來看RxJava還是沒有什么優(yōu)勢值得我們?nèi)ナ褂茫乱黄疫€會(huì)介紹更多RxJava的用法。慢慢得,你就會(huì)發(fā)現(xiàn)使用RxJava寫出來的代碼看上去真的很漂亮。
更多:
更多:
Android RxJava的使用(三)轉(zhuǎn)換(map、flatMap)
Android RxJava的使用(四)線程控制 —— Scheduler
以上有錯(cuò)誤之處感謝指出
參考:給 Android 開發(fā)者的 RxJava 詳解
(本文部分內(nèi)容引用自該博客)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/73399.html
摘要:前兩篇的使用一基本用法的使用二介紹了的基本用法,對(duì)還不了解的請(qǐng)先看以上兩篇。這篇為大家講解中和的使用。注意對(duì)這些發(fā)射的數(shù)據(jù)做的是合并操作,因此它們可能是交錯(cuò)的。如果要保證順的的話,可以使用。其他操作符除了和之外,還有其他操作符以供使用。 前兩篇Android RxJava的使用(一)基本用法、Android RxJava的使用(二)Action介紹了RxJava的基本用法,對(duì)Rxjav...
摘要:觀察者模式面向的需求是對(duì)象觀察者對(duì)對(duì)象被觀察者的某種變化高度敏感,需要在變化的一瞬間做出反應(yīng)。規(guī)定,當(dāng)不會(huì)再有新的發(fā)出時(shí),需要觸發(fā)方法作為標(biāo)志。在事件處理過程中出異常時(shí),會(huì)被觸發(fā),同時(shí)隊(duì)列自動(dòng)終止,不允許再有事件發(fā)出。 我從去年開始使用 RxJava ,到現(xiàn)在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的 Android 項(xiàng)目也在使用 RxJava ,并且使...
閱讀 1280·2023-04-26 02:38
閱讀 1562·2021-11-22 09:34
閱讀 1248·2021-09-26 10:19
閱讀 3315·2019-08-29 17:15
閱讀 3624·2019-08-29 12:27
閱讀 1790·2019-08-26 13:51
閱讀 1936·2019-08-26 13:47
閱讀 1095·2019-08-26 12:20