RxJava中ActionX与FuncX的区别

来源:互联网 发布:知行书院培训学校 编辑:程序博客网 时间:2024/06/06 07:08

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

0 0
原创粉丝点击