回顧
在上一節(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)的源碼看看叔锐。
還以為有多高深挪鹏,原來就是把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 詳解
(本文部分內容引用自該博客)