RxJava中ActionX與FuncX的區別
阿新 • • 發佈:2019-01-02
ActionX用在.subscribe()中的,傳入的個數和位置決定用處。ActionX的返回值都為void
自動建立 Subscriber ,並使用 onNextAction 來定義 onNext()
Action1<String> onNextAction = new Action1<String>() { // onNext() @Override public void call(String s) { Log.d(tag, s); } }; observable.subscribe(onNextAction);//只會執行onNext
自動建立 Subscriber ,並使用 onNextAction 和 onErrorAction 來定義 onNext() 和 onError()
Action1<Throwable> onErrorAction = new Action1<Throwable>() { // onError() @Override public void call(Throwable throwable) { // Error handling } }; observable.subscribe(onNextAction, onErrorAction);//執行onNext和onError方法
自動建立 Subscriber ,並使用 onNextAction、 onErrorAction 和 onCompletedAction 來定義 onNext()、 onError() 和 onCompleted()
Action0 onCompletedAction = new Action0() { // onCompleted() @Override public void call() { Log.d(tag, "completed"); } }; observable.subscribe(onNextAction, onErrorAction, onCompletedAction);//執行onNext、onError、onCompleted三個方法
Action1 和 Action0。 Action0 是 RxJava 的一個介面,它只有一個方法 call(),這個方法是無參無返回值的;由於 onCompleted() 方法也是無參無返回值的,因此 Action0 可以被當成一個包裝物件,將 onCompleted() 的內容打包起來將自己作為一個引數傳入 subscribe() 以實現不完整定義的回撥。這樣其實也可以看做將 onCompleted() 方法作為引數傳進了subscribe(),相當於其他某些語言中的『閉包』。 Action1 也是一個介面,它同樣只有一個方法 call(T param),這個方法也無返回值,但有一個引數;與 Action0 同理,由於 onNext(T obj) 和 onError(Throwable error) 也是單引數無返回值的,因此 Action1可以將 onNext(obj) 和 onError(error) 打包起來傳入 subscribe() 以實現不完整定義的回撥。事實上,雖然 Action0 和 Action1在 API 中使用最廣泛,但 RxJava 是提供了多個 ActionX 形式的介面 (例如 Action2, Action3) 的,它們可以被用以包裝不同的無返回值的方法。
FuncX常用在map、flatMap中,將傳過來的數值型別轉化為另一種數值型別,“FuncX”中的“X”代表著多少個引數
Func1<Integer, String> stringFunc1 = new Func1<Integer, String>() {
@Override
public String call(Integer integer) {
return "haha--"+integer;
}
};
Observable<String> stringObservable = Observable.just(1, 2, 3, 4, 5).map(stringFunc1);
stringObservable.subscribe(new Action1<String>() {
@Override
public void call(String s) {
Log.d("RxJavaDemo",s);
}
});
Func1 的類。它和 Action1 非常相似,也是 RxJava 的一個介面,用於包裝含有一個引數的方法。 Func1 和Action 的區別在於, Func1 包裝的是有返回值的方法。另外,和 ActionX 一樣, FuncX 也有多個,用於不同引數個數的方法。FuncX和 ActionX 的區別在 FuncX 包裝的是有返回值的方法。