RxJava入门到精通

Android进阶学习RxJava(三)Subscriber简略

2020-10-22  本文已影响0人  郝大富

先来横向对比一下

Observer有三个方法
Subscriber 有四个方法

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

Action0
public interface Action0 extends Action {
    void call();
}
Action1
public interface Action1<T> extends Action {
    void call(T t);
}
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 设置泛型为String
Action1<String> onNextAction = new Action1<String>() {
    @Override
    public void call(String s) {
        LogUtils.e(s);
    }
};
//把小明和小花关联起来
Observable.just("Hello", "World").subscribe(onNextAction);

到重点了
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);

上一篇 下一篇

猜你喜欢

热点阅读