Android进阶学习RxJava(三)Subscriber简略版Action超省事儿

先来横向对比一下
Observer有三个方法
  • onCompleted
  • onError
  • onNext
Subscriber 有四个方法
  • onStart(可有选择性的重写)
  • onCompleted
  • onError
  • onNext
Action 是 RxJava 的一个接口,常用的有Action0和Action1
Action0
  • 先上Action0源码 只有一个无参方法
public interface Action0 extends Action {
    void call();
}
  • Action0比较简单和下面一块来说
Action1
  • 先上Action1源码
public interface Action1<T> extends Action {
    void call(T t);
}
  • 然后上关联(subscribe)源码,这个是只有onNext一个参数的重写方法
  • 其他的也类似,根据参数内部不同直接调用对应方法
public final Subscription subscribe(final Action1<? super T> onNext) {
    if (onNext == null) {
        throw new IllegalArgumentException("onNext can not be null");
    }
    // 如果传入的Action 不为空,则进行转换,源码里进行调用onNext方法
    return subscribe(new Subscriber<T>() {
        @Override
        public final void onCompleted() {
            // do nothing
        }
        @Override
        public final void onError(Throwable e) {
            throw new OnErrorNotImplementedException(e);
        }
        @Override
        public final void onNext(T args) {
            //看这句,在这里直接调用参数onNext里Action的call方法
            onNext.call(args);
        }
    });
}

  • 所以,源码上做了一些简写,一些情况下Action完全可以替代Subscriber,还更加灵活
我们开始编故事(撸码)
  • 创建精简版小明(使用Action1)
//新建Action 设置泛型为String
Action1<String> onNextAction = new Action1<String>() {
    @Override
    public void call(String s) {
        LogUtils.e(s);
    }
};
//把小明和小花关联起来
Observable.just("Hello", "World").subscribe(onNextAction);

  • 有没有感觉,代码越写越少,功能一点都没少
到重点了
  • 看subscribe所有方法描述
    avatar
  • OK 接着写
Action1<String> onNextAction = new Action1<String>() {
    @Override
    public void call(String s) {
        LogUtils.e(s);
    }
};
Action1<Throwable> onErrorAction = new Action1<Throwable>() {
    @Override
    public void call(Throwable throwable) {
        LogUtils.e(throwable.getMessage());
    }
};
Action0 actionCompleted = new Action0() {
    @Override
    public void call() {
        LogUtils.e("Completed");
    }
};

//第一种调用形式
Observable.just("Hello", "World").subscribe(onNextAction);
//第二种调用形式
Observable.just("Hello", "World").subscribe(onNextAction,onErrorAction);
//全部调用形式
Observable.just("Hello", "World").subscribe(onNextAction,onErrorAction,actionCompleted);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值