Android RxJava的基本使用二

来源:互联网 发布:牛彩纽约源码 编辑:程序博客网 时间:2024/05/16 01:53

Action
Action是RxJava的一个接口,常用的有Action1和Action0

Action0: 它只有一个方法 call(),这个方法是无参无返回值的;由于 onCompleted() 方法也是无参无返回值的,因此 Action0 可以被当成一个包装对象,将 onCompleted() 的内容打包起来将自己作为一个参数传入 subscribe() 以实现不完整定义的回调。
Ation1:它同样只有一个方法 call(T param),这个方法也无返回值,但有一个参数;与 Action0 同理,由于 onNext(T obj) 和 onError(Throwable error) 也是单参数无返回值的,因此 Action1 可以将 onNext(obj)和 onError(error) 打包起来传入 subscribe() 以实现不完整定义的回调

Subscriber的写法是这样的

  Observable.just("Hello", "World").                subscribe(new Subscriber<String>() {                    @Override                    public void onCompleted() {                    }                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onNext(String s) {                        Logger.d(s);                    }                });

用到的只有 onNext(String s),方法比较多但是有很多不需要,代码也就多了不够简洁,使用Action使代码更简洁更清晰

  Observable.just("哈哈哈哈", "发发发发付").subscribe(new Action1<String>() {            @Override            public void call(String s) {                Logger.d(s);            }        });

Action的使用

定义三个对象

 Action1<String> onNextAction=new Action1<String>() {            @Override            public void call(String s) {                Logger.d(s);            }        };  Action1<Throwable> onError=new Action1<Throwable>() {            @Override            public void call(Throwable throwable) {                Logger.d(throwable.getMessage());            }        };
 Action0 onCompleted=new Action0() {            @Override            public void call() {                Logger.d("onCompleted");            }        };

根据需要往subscribe()中放入不同的对象

 Observable.just("aaaa", "bbbb").subscribe(onNextAction);
 Observable.just("eeee", "ggggg").subscribe(onNextAction,onError);
 Observable.just("cccc", "dddd").subscribe(onNextAction,onError,onCompleted);

现在有个疑问,为什么使用Action也能达到使用Subscriber的结果?进subscribe(Action1 onNext)的源码看看。

 public final Subscription subscribe(final Action1<? super T> onNext) {        if (onNext == null) {            throw new IllegalArgumentException("onNext can not be null");        }        Action1<Throwable> onError = InternalObservableUtils.ERROR_NOT_IMPLEMENTED;        Action0 onCompleted = Actions.empty();        return subscribe(new ActionSubscriber<T>(onNext, onError, onCompleted));    }

其实是把Action对象转化为相应的Subscriber对象了

原创粉丝点击