当前位置:  开发笔记 > Android > 正文

RxJava1 vs Rxjava2:onNext中的异常

如何解决《RxJava1vsRxjava2:onNext中的异常》经验,为你挑选了1个好方法。

在RxJava1中执行以下操作时,onNext中的异常将重新路由到同一订户的onError中:

    Observable.from(Arrays.asList("1", "22", "333", "4444")).subscribe(new Subscriber() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {
            Log.d("RxJava1", "onError: " + e.getCause());
        }

        @Override
        public void onNext(String s) {
            if (s.length() == 4) {
                Integer test = null;
                test.hashCode();
            }
            Log.d("RxJava1", s + " - " + s.length());
        }
    });

输出:

D/RxJava1: 1 - 1
D/RxJava1: 22 - 2
D/RxJava1: 333 - 3
D/RxJava1: onError: null

据我所知,在RxJava2中这样做时,此行为已更改,不再返回onError,而只是崩溃:

    Observable.fromIterable(Arrays.asList("1", "22", "333", "4444")).subscribeWith(new Observer() {
        @Override
        public void onSubscribe(Disposable d) {

        }

        @Override
        public void onNext(String s) {
            if (s.length() == 4) {
                Integer test = null;
                test.hashCode();
            }
            Log.d("RxJava2", s + " - " + s.length());
        }

        @Override
        public void onError(Throwable e) {
            Log.d("RxJava2", "onError: " + e.getCause());
        }

        @Override
        public void onComplete() {

        }
    });

输出:

D/RxJava2: 1 - 1
D/RxJava2: 22 - 2
D/RxJava2: 333 - 3
D/AndroidRuntime: Shutting down VM

我最想知道的是,两个版本中的哪个版本做的“错误”?这是已修复的RxJava1中的错误吗?这是RxJava2中的错误吗?还是因为我找不到关于此的任何详细信息,这首先不是一个有意识的改变吗?

ps。我确实注意到,将其包装到“ SafeObserver”后会再次重新路由到onError



1> akarnokd..:

两者都没错,这两个版本具有不同的设计约束。在2.x中,Observer/ Subscriber不能从其onXXX方法中抛出。

如果您subscribe()在2.x中使用1-2-3自变量方法,则会被覆盖。否则,如果您真的无法解决onNext使用问题safeSubscribe()

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有