美文网首页
Rxjava2异常捕获

Rxjava2异常捕获

作者: 康迪437 | 来源:发表于2017-11-10 10:11 被阅读0次
Observable.just("123")
        .map(new Function<String, Integer>() {
    @Override
    public Integer apply(String s) throws Exception {
        String i = null;
        i.length();
        return 1;
    }
}).subscribe();

这种情况下, 由于在subscribe时没有传入异常处理时的Consumer, 所以在这里会崩掉.
看一下源码:

public final Disposable subscribe() {
    // 会传入一个默认的 Functions.ERROR_CONSUMER
    return subscribe(Functions.emptyConsumer()
            , Functions.ERROR_CONSUMER
            , Functions.EMPTY_ACTION, Functions.emptyConsumer());
}

public static final Consumer<Throwable> ERROR_CONSUMER = new Consumer<Throwable>() {
    @Override
    public void accept(Throwable error) {
        // 捕获到异常后会掉还用 RxJavaPlugins.onError.onError(); 
        RxJavaPlugins.onError(error);
    }
};

public static void onError(Throwable error) {
    // 注意errorHandler
    Consumer<Throwable> f = errorHandler;

    if (error == null) {
        error = new NullPointerException("onError called with null. Null values are generally not allowed in 2.x operators and sources.");
    }

    // errorHandler不为空, 调用它的 accept() 方法, 并 return
    if (f != null) {
        try {
            f.accept(error);
            return;
        } catch (Throwable e) {
            e.printStackTrace(); // NOPMD
            uncaught(e);
        }
    }
    
    // 如果执行到这里就会抛出异常
    error.printStackTrace(); // NOPMD
    uncaught(error);
}
// RxjavaPlugins
static volatile Consumer<Throwable> errorHandler;

public static void setErrorHandler(Consumer<Throwable> handler) {
    if (lockdown) {
        throw new IllegalStateException("Plugins can't be changed anymore");
    }
    errorHandler = handler;
}

可以利用 上面的方法设置errorHandler, 这样当你, subscribr()不传入errorConsumer时, 就会捕获到异常不会崩掉

相关文章

  • Rxjava2异常捕获

    这种情况下, 由于在subscribe时没有传入异常处理时的Consumer, 所以在这里会崩掉.看一下源码: 可...

  • Python面向对象2

    异常 捕获异常image.png根据错误类型捕获异常image.png 未知错误捕获image.png 捕获异常完...

  • 工作总结-002

    异常捕获service捕获业务异常,自定义BaseException;interface捕获业务异常,以及其他异常...

  • Rxjava2异常 全局捕获RxJava2下onNext中的异常

    参考: 从最近的Rxjava2异常说起 解决方法 全局注册一个ErrorHandler统一处理异常,但是不会回调链...

  • C++学习第20课,异常

    1 异常 一句话概括:捕获异常 1.1 谁捕获异常?捕获谁? A捕获B A() { try{ B(); } ...

  • Python 面向对象 - 08 异常

    目录一、概念二、捕获异常2.1 简单的捕获异常语法2.2 错误类型捕获2.3 异常捕获完整语法三、异常的传递四、抛...

  • springboot 异常捕获和处理

    springboot 异常捕获和处理 异常捕获处理

  • iOS 异常捕获处理机制(初级篇)

    一、异常处理简介 二、异常捕获案例 使用@try catch捕获异常 例1是最简单的一种写法: 捕获异常之嵌套捕获...

  • python3.7异常小记

    首先上示例代码: 这段代码包含了,异常分支类型捕获,无异常捕获,有无异常都会捕获的执行逻辑。 捕获全局异常 对入口...

  • Python异常处理

    Python异常处理 一、捕获异常 1.异常捕获语法 2.错误类型捕获 except:处理所有异常。except ...

网友评论

      本文标题:Rxjava2异常捕获

      本文链接:https://www.haomeiwen.com/subject/mhnvmxtx.html