gpt4 book ai didi

rx-java - RxJava1 与 Rxjava2 : Exception in onNext

转载 作者:行者123 更新时间:2023-12-04 18:59:15 24 4
gpt4 key购买 nike

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

    Observable.from(Arrays.asList("1", "22", "333", "4444")).subscribe(new Subscriber<String>() {
@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<String>() {
@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 中的错误吗?
或者这不是一个有意识的改变,因为我找不到任何关于这个的细节?

附:我确实注意到将其包装到“SafeObserver”中再次重新路由到 onError

最佳答案

两者都没有错,两个版本具有不同的设计约束。在 2.x 中 Observer/Subscriber不能扔掉它的onXXX方法。

如果您使用 1-2-3 参数 subscribe()涵盖了 2.x 中的方法。否则如果你真的无法修复你的 onNext使用 safeSubscribe() .

关于rx-java - RxJava1 与 Rxjava2 : Exception in onNext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41849848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com