RxJava2.x详解(一)

RxJava2.x详解系列博客

转载请标明出处:
https://blog.csdn.net/u011035026/article/details/85307622;

1、RxJava简介?
  • 简洁,支持链式调用
  • 扩展的观察者模式
  • 线程之间切换非常方便
  • 被观察者订阅观察者
2、RxJava2.x总纲
3、RxJava1.x和RxJava2.x的区别?


4、RxJava的使用三步骤
  • 创建Observable(被观察者)
  • 创建Observer(观察者)
  • 使用subscribe()进行订阅,这里要注意是被观察者订阅观察者
5、subscribe的重载方法
  • subscribe(onNext)
  • subscribe(onNext,onError)
  • subscribe(onNext,onError,onComplete)
  • subscribe(onNext,onError,onComplete,obSubscribe)
    注意:
    (1)onNext、onError、onSubscribe都是对应一个Consumer对象,而onComplete对应一个Action对象。
    (2)Consumer和Action的区别在于Consumer带有一个单一参数类型,Action是一个无参数类型。
    (3)执行顺序优先级,onSubscribe优先执行,成功则执行onNext,然后onComplete,反之失败则执行onError。
6、RxJava2.x中的5种观察者模式
  • Observable=>能够发射0或者n个数据,并以成功或者错事件终止。
  • Flowable=>能够发射0或者n个数据,并以成功或者错误事件终止,支持背压,可以控制数据源的发射速度。
  • Single=>只发射单个数据或者错误事件
  • Completable=>从来不发射数据,只处理onComplete和onError事件。
  • Maybe=>能够发射0或者1个数据,要么成功,要么失败。
(1)那么接下来咱们先看看第一种观察者模式写法Observable.subscribe(Observer)
### 第一种写法
### 注意这里的onNext()方法是Rxjava2.x里面的一种操作符,通俗的理解就是一个事件触发机制,
### 它会把"Hello Rxjava2.x"这个String类型的字符串数据,发送到成功的回调方法中去让其响应。
### 同理onError()和onComplete()方法同上理解,只是触发的回调不同而已。
Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception {
                emitter.onNext("Hello Rxjava2.x");
                //emitter.onError(new Throwable("Hello Rxjava2.x Error"));
                emitter.onComplete();
            }
        }).subscribe(new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {
                //订阅的回调,可以用来取消当前订阅
                System.out.println("subscribe");
            }

            @Override
            public void onNext(String s) {
                //成功的回调
                System.out.println(s);
            }

            @Override
            public void onError(Throwable e) {
                //失败的回调
                System.out.println(e.getMessage());
            }

            @Override
            public void onComplete() {
                //完成的回调
                System.out.println("onComplete");
            }
        });
### 第二种写法
Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception {
                emitter.onNext("Hello Rxjava2.x");
                //emitter.onError(new Throwable("Hello Rxjava2.x Error"));
                emitter.onComplete();
            }
        }).subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {
                //成功的回调
                System.out.println(s);
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable e) throws Exception {
                //失败的回调
                System.out.println(e.getMessage());
            }
        }, new Action() {
            @Override
            public void run() throws Exception {
                //完成的回调
                System.out.println("onComplete");
            }
        }, new Consumer<Disposable>() {
            @Override
            public void accept(Disposable disposable) throws Exception {
                //订阅的回调,可以用来取消当前订阅
                System.out.println("subscribe");
            }
        });
### 对应的Kotlin写法
 Observable.create(ObservableOnSubscribe<String> {
            it.onNext("Hello Rxjava2.x")
            //it.onError(new Throwable("Hello Rxjava2.x Error"));
            it.onComplete()
        }).subscribe(object : Observer<String> {
            override fun onSubscribe(d: Disposable) {
                //订阅的回调,可以用来取消当前订阅
                println("subscribe")
            }

            override fun onNext(s: String) {
                //成功的回调
                println(s)
            }

            override fun onError(e: Throwable) {
                //失败的回调
                print(e.message)
            }

            override fun onComplete() {
                //完成的回调
                println("onComplete")
            }
        })
Observable.create(ObservableOnSubscribe<String> {
            it.onNext("Hello Rxjava2.x")
            //it.onError(new Throwable("Hello Rxjava2.x Error"));
            it.onComplete()
        }).subscribe({
            //成功的回调
            println(it)
        }, {
            //失败的回调
            println(it.message)
        }, {
            //完成的回调
            println("onComplete")
        }, {
            //订阅的回调,可以用来取消当前订阅
            println("subscribe")
        })
(2)第二种观察者模式写法Flowable.subscribe(Subscriver)
### 第一种写法
Flowable.create(new FlowableOnSubscribe<String>() {
            @Override
            public void subscribe(FlowableEmitter<String> emitter) throws Exception {
                emitter.onNext("Hello Rxjava2.x");
                //emitter.onError(new Throwable("Hello Rxjava2.x Error"));
                emitter.onComplete();
            }
        }, BackpressureStrategy.BUFFER).subscribe(new FlowableSubscriber<String>() {
            @Override
            public void onSubscribe(Subscription s) {
                //订阅的回调,可以用来取消当前订阅
                System.out.println("subscribe");
            }

            @Override
            public void onNext(String s) {
                //成功的回调
                System.out.println(s);
            }

            @Override
            public void onError(Throwable e) {
                //失败的回调
                System.out.println(e.getMessage());
            }

            @Override
            public void onComplete() {
                //完成的回调
                System.out.println("onComplete");
            }
        });
### 第二种写法
 Flowable.create(new FlowableOnSubscribe<String>() {
            @Override
            public void subscribe(FlowableEmitter<String> emitter) throws Exception {
                emitter.onNext("Hello Rxjava2.x");
                //emitter.onError(new Throwable("Hello Rxjava2.x Error"));
                emitter.onComplete();
            }
        }, BackpressureStrategy.BUFFER).subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {
                //成功的回调
                System.out.println(s);
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable e) throws Exception {
                //失败的回调
                System.out.println(e.getMessage());
            }
        }, new Action() {
            @Override
            public void run() throws Exception {
                //完成的回调
                System.out.println("onComplete");
            }
        }, new Consumer<Subscription>() {
            @Override
            public void accept(Subscription subscription) throws Exception {
                //订阅的回调,可以用来取消当前订阅
                System.out.println("subscribe");
            }
        });
### 对应的Kotlin写法
Flowable.create(FlowableOnSubscribe<String> {
            it.onNext("Hello Rxjava2.x")
            //it.onError(new Throwable("Hello Rxjava2.x Error"));
            it.onComplete()
        }, BackpressureStrategy.BUFFER).subscribe(object : FlowableSubscriber<String> {
            override fun onSubscribe(s: Subscription) {
                //订阅的回调,可以用来取消当前订阅
                println("subscribe")
            }

            override fun onNext(s: String) {
                //成功的回调
                println(s)
            }

            override fun onError(e: Throwable) {
                //失败的回调
                println(e.message)
            }

            override fun onComplete() {
                //完成的回调
                println("onComplete")
            }
        })
Flowable.create(FlowableOnSubscribe<String> {
            it.onNext("Hello Rxjava2.x")
            //it.onError(new Throwable("Hello Rxjava2.x Error"));
            it.onComplete()
        }, BackpressureStrategy.BUFFER).subscribe({ s ->
            //成功的回调
            println(s)
        }, {
            //失败的回调
            println(it.message)
        }, {
            //完成的回调
            println("onComplete")
        }, {
            //订阅的回调,可以用来取消当前订阅
            println("subscribe")
        })
(3)第三种观察者模式写法Single.subscribe(SingleObserver)
### 第一种写法
Single.create(new SingleOnSubscribe<String>() {
            @Override
            public void subscribe(SingleEmitter<String> emitter) throws Exception {
                emitter.onSuccess("Hello Rxjava2.x");
                //emitter.onError(new Throwable("Hello Rxjava2.x Error"));
            }
        }).subscribe(new SingleObserver<String>() {
            @Override
            public void onSubscribe(Disposable d) {
                //订阅的回调,可以用来取消当前订阅
                System.out.println("subscribe");
            }

            @Override
            public void onSuccess(String s) {
                //成功的回调
                System.out.println(s);
            }

            @Override
            public void onError(Throwable e) {
                //失败的回调
                System.out.println(e.getMessage());
            }
        });
### 第二种写法
Single.create(new SingleOnSubscribe<String>() {
            @Override
            public void subscribe(SingleEmitter<String> emitter) throws Exception {
                emitter.onSuccess("Hello Rxjava2.x");
                //emitter.onError(new Throwable("Hello Rxjava2.x Error"));
            }
        }).subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {
                //成功的回调
                System.out.println(s);
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable e) throws Exception {
                //失败的回调
                System.out.println(e.getMessage());
            }
        });
### 对应的Kotlin写法
Single.create(SingleOnSubscribe<String> {
            it.onSuccess("Hello Rxjava2.x")
            //it.onError(new Throwable("Hello Rxjava2.x Error"));
        }).subscribe(object : SingleObserver<String> {
            override fun onSubscribe(d: Disposable) {
                //订阅的回调,可以用来取消当前订阅
                println("subscribe")
            }

            override fun onSuccess(s: String) {
                //成功的回调
                println(s)
            }

            override fun onError(e: Throwable) {
                //失败的回调
                println(e.message)
            }
        })
Single.create(SingleOnSubscribe<String> {
            it.onSuccess("Hello Rxjava2.x")
            //it.onError(new Throwable("Hello Rxjava2.x Error"));
        }).subscribe({
            //成功的回调
            println(it)
        }, { 
            //失败的回调
            println(it.message)
        })
(4)第四种观察者模式写法Completable.subscribe(CompletebleObserver)
### 第一种写法
 Completable.create(new CompletableOnSubscribe() {
            @Override
            public void subscribe(CompletableEmitter emitter) throws Exception {
                //emitter.onError(new Throwable("Hello Rxjava2.x Error"));
                emitter.onComplete();
            }
        }).subscribe(new CompletableObserver() {
            @Override
            public void onSubscribe(Disposable d) {
                //订阅的回调,可以用来取消当前订阅
                System.out.println("subscribe");
            }

            @Override
            public void onComplete() {
                //完成的回调
                System.out.println("onComplete");
            }

            @Override
            public void onError(Throwable e) {
                //失败的回调
                System.out.println(e.getMessage());
            }
        });
### 第二种写法
Completable.create(new CompletableOnSubscribe() {
            @Override
            public void subscribe(CompletableEmitter emitter) throws Exception {
                //emitter.onError(new Throwable("Hello Rxjava2.x Error"));
                emitter.onComplete();
            }
        }).subscribe(new Action() {
            @Override
            public void run() throws Exception {
                //完成的回调
                System.out.println("onComplete");
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable e) throws Exception {
                //失败的回调
                System.out.println(e.getMessage());
            }
        });
### 对应的Kotlin写法
Completable.create {
            //it.onError(new Throwable("Hello Rxjava2.x Error"));
            it.onComplete()
        }.subscribe(object : CompletableObserver {
            override fun onSubscribe(d: Disposable) {
                //订阅的回调,可以用来取消当前订阅
                println("subscribe")
            }

            override fun onComplete() {
                //完成的回调
                println("onComplete")
            }

            override fun onError(e: Throwable) {
                //失败的回调
                println(e.message)
            }
        })
Completable.create {
            //it.onError(new Throwable("Hello Rxjava2.x Error"));
            it.onComplete()
        }.subscribe({
            //完成的回调
            println("onComplete")
        }, { 
            //失败的回调
            println(it.message)
        })
(5)第四种观察者模式写法Maybe.subscribe(MaybeObserver)
### 第一种写法
Maybe.create(new MaybeOnSubscribe<String>() {
            @Override
            public void subscribe(MaybeEmitter<String> emitter) throws Exception {
                emitter.onSuccess("Hello Rxjava2.x");
                //emitter.onError(new Throwable("Hello Rxjava2.x Error"));
                emitter.onComplete();
            }
        }).subscribe(new MaybeObserver<String>() {
            @Override
            public void onSubscribe(Disposable d) {
                //订阅的回调,可以用来取消当前订阅
                System.out.println("subscribe");
            }

            @Override
            public void onSuccess(String s) {
                //成功的回调
                System.out.println(s);
            }

            @Override
            public void onError(Throwable e) {
                //失败的回调
                System.out.println(e.getMessage());
            }

            @Override
            public void onComplete() {
                //完成的回调
                System.out.println("onComplete");
            }
        });
 ### 第二种写法
Maybe.create(new MaybeOnSubscribe<String>() {
            @Override
            public void subscribe(MaybeEmitter<String> emitter) throws Exception {
                emitter.onSuccess("Hello Rxjava2.x");
                //emitter.onError(new Throwable("Hello Rxjava2.x Error"));
                emitter.onComplete();
            }
        }).subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {
                //成功的回调
                System.out.println(s);
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable e) throws Exception {
                //失败的回调
                System.out.println(e.getMessage());
            }
        }, new Action() {
            @Override
            public void run() throws Exception {
                //完成的回调
                System.out.println("onComplete");
            }
        });
### 对应的Kotlin写法
Maybe.create(MaybeOnSubscribe<String> {
            it.onSuccess("Hello Rxjava2.x")
            //it.onError(new Throwable("Hello Rxjava2.x Error"));
            it.onComplete()
        }).subscribe(object : MaybeObserver<String> {
            override fun onSubscribe(d: Disposable) {
                //订阅的回调,可以用来取消当前订阅
                println("subscribe")
            }

            override fun onSuccess(s: String) {
                //成功的回调
                println(s)
            }

            override fun onError(e: Throwable) {
                //失败的回调
                println(e.message)
            }

            override fun onComplete() {
                //完成的回调
                println("onComplete")
            }
        })
Maybe.create(MaybeOnSubscribe<String> {
            it.onSuccess("Hello Rxjava2.x")
            //it.onError(new Throwable("Hello Rxjava2.x Error"));
            it.onComplete()
        }).subscribe({
            //成功的回调
            println(it)
        }, {
            //失败的回调
            println(it.message)
        }, {
            //完成的回调
            println("onComplete")
        })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值