正如在docs中所解释的,RxJava 2.x不再接受空值。因此,以下两行代码都以onError结束也就不足为奇了:
Observable.fromCallable(() -> null);
Observable.just(1).flatMap(i -> Observable.error(new RuntimeException()));目前尚不清楚的是为什么
Observable.just(1).flatMap(i -> Observable.fromCallable(() -> null))成功终止,且不发出任何项。因为它的行为方式与Observable.error相同,所以它看起来是合理的
我可以在rx-java2.1.2的源代码中看到
public final <R> Observable<R> flatMap(...) {
if (this instanceof ScalarCallable) {
@SuppressWarnings("unchecked")
T v = ((ScalarCallable<T>)this).call();
if (v == null) {
return empty();
}
...
}这就解释了为什么在代码方面会发生这种情况,但我仍然有两个问题:
1)这是有意为之的行为还是bug?
2)如果是故意的,有没有原因?
发布于 2017-07-25 22:03:41
这是Observable.fromCallable的一个错误,将使用PR 5517修复。
如果由于某种原因,您无法在此设置中避免返回null,则可以应用hide()来解决此错误:
Observable.just(1).flatMap(i -> Observable.fromCallable(() -> null).hide())或者帮助RxJava抛出:
Observable.just(1)
.flatMap(i -> Observable.fromCallable(() ->
java.util.Objects.requireNonNull(apiReturningNull()))
)https://stackoverflow.com/questions/45304226
复制相似问题