Android RxJava的基本使用二

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对象了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值