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