CompositeDisposable.dispose()导致NPE

时间:2019-03-18 13:28:06

标签: rx-java rx-java2

在请求期间调用.dispose()会导致NPE。有什么办法可以解决这个问题?

错误消息

    java.lang.NullPointerException: The callable returned a null value
W/System.err:     at io.reactivex.internal.functions.ObjectHelper.requireNonNull(ObjectHelper.java:39)
        at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:44)
        at io.reactivex.Single.subscribe(Single.java:3575)
        at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
        at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
W/System.err:     at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at java.lang.Thread.run(Thread.java:764)

1 个答案:

答案 0 :(得分:0)

这并非来自调用dispose,这是fromCallable的结果,即null。在Rxjava 2中,您无法通过Steam传播空值。它将像您遇到的那样导致空指针异常。您需要检查代码并找出避免返回null的方法。也许使用一个空对象表示没有值。

对此有一个例外,也许是解决此问题的最佳方法。如果方法返回Maybe.fromCallable,则null将返回一个可观察的空值。在您的情况下,这可能是最准确的事情。