RxJava学习(三)

我们看下面的代码

  Observable.just("android").map(new Func1<String, String>() {
            @Override
            public String call(String s) {
                potentialException(s);//可能发生异常的代码
                return "";
            }
        }).subscribe(new Subscriber<String>() {
            @Override
            public void onCompleted() {
                Log.d(TAG, "onCompleted: ");
            }
            @Override
            public void onError(Throwable e) {
                Log.d(TAG, "onError: ");
            }

            @Override
            public void onNext(String s) {
                Log.d(TAG, "onNext: ");
            }
        });

代码中如果发生了异常,每一个Observerable对象在终结的时候都会调用onCompleted()或者onError()方法,所以会打印”onCompleted”或者”onError”。

这种模式有以下几个优点:

1.只要有异常发生onError()一定会被调用

这极大的简化了错误处理。只需要在一个地方处理错误即可以。

2.操作符不需要处理异常

将异常处理交给订阅者来做,Observerable的操作符调用链中一旦有一个抛出了异常,就会直接执行onError()方法。

3.你能够知道什么时候订阅者已经接收了全部的数据。

知道什么时候任务结束能够帮助简化代码的流程。

调度器

使用subscribeOn()指定被观察者代码运行的线程,使用observerOn()指定订阅者运行的线程

 myObservableServices.retrieveImage(url)
                .subscribeOn(Schedulers.io())//在IO线程运行
                .observeOn(AndroidSchedulers.mainThread())//在主线程运行
                .subscribe(bitmap -> myImageView.setImageBitmap(bitmap));

订阅

Observable对象调用subscribe函数会返回一个Subscription对性爱那个名代表了被观察者和订阅者之前的关系

 Subscription sub =  Observable.just("android").subscribe(new Subscriber<String>() {
            @Override
            public void onCompleted() {
                Log.d(TAG, "onCompleted: ");
            }
            @Override
            public void onError(Throwable e) {
                Log.d(TAG, "onError: ");
            }

            @Override
            public void onNext(String s) {
                Log.d(TAG, "onNext: ");
            }
        });

Subscription 有两个方法

这里写图片描述

第一个方法,是否取消了订阅,第二个方法,取消订阅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值