1. 程式人生 > >RxJava中ActionX與FuncX的區別

RxJava中ActionX與FuncX的區別

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 包裝的是有返回值的方法。