onError 抱怨提供的价值
onError complains about supplied value
我喜欢 RxJava,但我不得不承认,有时它很难调试。
我收到一个错误
Fatal Exception: java.lang.NullPointerException: Value supplied was null
at io.reactivex.internal.operators.single.SingleOnErrorReturn$OnErrorReturn.onError(SingleOnErrorReturn.java:66)
at io.reactivex.internal.operators.single.SingleDelayWithCompletable$OtherObserver.onError(SingleDelayWithCompletable.java:64)
at io.reactivex.internal.operators.completable.CompletableFromSingle$CompletableFromSingleObserver.onError(CompletableFromSingle.java:41)
at io.reactivex.internal.operators.single.SingleOnErrorReturn$OnErrorReturn.onError(SingleOnErrorReturn.java:68)
at io.reactivex.internal.observers.ResumeSingleObserver.onError(ResumeSingleObserver.java:51)
at io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:78)
at io.reactivex.internal.operators.single.SingleError.subscribeActual(SingleError.java:42)
at io.reactivex.Single.subscribe(Single.java:3666)
at io.reactivex.internal.operators.single.SingleResumeNext$ResumeMainSingleObserver.onError(SingleResumeNext.java:80)
at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:69)
at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:69)
at io.reactivex.internal.operators.observable.ObservableToListSingle$ToListObserver.onError(ObservableToListSingle.java:104)
at io.reactivex.observers.SerializedObserver.onError(SerializedObserver.java:153)
at io.reactivex.internal.operators.observable.ObservableConcatMap$SourceObserver.onError(ObservableConcatMap.java:142)
at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:72)
at it.mypackage.data.source.aws.LegDataSourceLegsListener.onFailure(LegADataSource.java:760)
at com.apollographql.apollo.GraphQLCall$Callback.onNetworkError(GraphQLCall.java:135)
at com.apollographql.apollo.internal.RealAppSyncCall.onFailure(RealAppSyncCall.java:259)
at com.apollographql.apollo.internal.interceptor.ApolloCacheInterceptor.onFailure(ApolloCacheInterceptor.java:108)
at com.apollographql.apollo.internal.interceptor.ApolloParseInterceptor.onFailure(ApolloParseInterceptor.java:94)
at com.apollographql.apollo.internal.interceptor.ApolloServerInterceptor.onFailure(ApolloServerInterceptor.java:105)
at okhttp3.RealCall$AsyncCall.run(RealCall.kt:146)
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)
错误似乎来自这个片段:
@Override
public void onFailure(@Nonnull ApolloException e) {
if (!emitter.isDisposed()) {
emitter.onError(e); // here's the problem
}
}
现在的问题是 ApolloException
不为空,还要检查实现我可以说不应该有空作为 onFailure
的参数。
callBack.onFailure(new ApolloNetworkException("Failed to execute http call", e));
那么,这个错误从何而来?
有什么想法吗?
注意:我使用的是 RxJava2,版本 2.3.4
NullPointerException
具体来自 SingleOnErrorReturn$OnErrorReturn.OnError
:
public void onError(Throwable e) {
T v;
if (valueSupplier != null) {
try {
v = valueSupplier.apply(e);
} catch (Throwable ex) {
Exceptions.throwIfFatal(ex);
observer.onError(new CompositeException(e, ex));
return;
}
} else {
v = value;
}
if (v == null) {
NullPointerException npe = new NullPointerException("Value supplied was null"); // This is the exception you're hitting
npe.initCause(e);
observer.onError(npe);
return;
}
它抱怨的 v
是实际传递给 onErrorReturn(T value)
运算符的 value
。传的value
是null
,这是不允许的
所以我会在 t.mypackage.data.source.aws.LegDataSourceLegsListener.onFailure
下游寻找一个 onErrorReturn
运算符,它采用 null
值。根据堆栈跟踪,它看起来会出现在 .delaySubscription(Completable)
运算符之后。
我喜欢 RxJava,但我不得不承认,有时它很难调试。
我收到一个错误
Fatal Exception: java.lang.NullPointerException: Value supplied was null
at io.reactivex.internal.operators.single.SingleOnErrorReturn$OnErrorReturn.onError(SingleOnErrorReturn.java:66)
at io.reactivex.internal.operators.single.SingleDelayWithCompletable$OtherObserver.onError(SingleDelayWithCompletable.java:64)
at io.reactivex.internal.operators.completable.CompletableFromSingle$CompletableFromSingleObserver.onError(CompletableFromSingle.java:41)
at io.reactivex.internal.operators.single.SingleOnErrorReturn$OnErrorReturn.onError(SingleOnErrorReturn.java:68)
at io.reactivex.internal.observers.ResumeSingleObserver.onError(ResumeSingleObserver.java:51)
at io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:78)
at io.reactivex.internal.operators.single.SingleError.subscribeActual(SingleError.java:42)
at io.reactivex.Single.subscribe(Single.java:3666)
at io.reactivex.internal.operators.single.SingleResumeNext$ResumeMainSingleObserver.onError(SingleResumeNext.java:80)
at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:69)
at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:69)
at io.reactivex.internal.operators.observable.ObservableToListSingle$ToListObserver.onError(ObservableToListSingle.java:104)
at io.reactivex.observers.SerializedObserver.onError(SerializedObserver.java:153)
at io.reactivex.internal.operators.observable.ObservableConcatMap$SourceObserver.onError(ObservableConcatMap.java:142)
at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:72)
at it.mypackage.data.source.aws.LegDataSourceLegsListener.onFailure(LegADataSource.java:760)
at com.apollographql.apollo.GraphQLCall$Callback.onNetworkError(GraphQLCall.java:135)
at com.apollographql.apollo.internal.RealAppSyncCall.onFailure(RealAppSyncCall.java:259)
at com.apollographql.apollo.internal.interceptor.ApolloCacheInterceptor.onFailure(ApolloCacheInterceptor.java:108)
at com.apollographql.apollo.internal.interceptor.ApolloParseInterceptor.onFailure(ApolloParseInterceptor.java:94)
at com.apollographql.apollo.internal.interceptor.ApolloServerInterceptor.onFailure(ApolloServerInterceptor.java:105)
at okhttp3.RealCall$AsyncCall.run(RealCall.kt:146)
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)
错误似乎来自这个片段:
@Override
public void onFailure(@Nonnull ApolloException e) {
if (!emitter.isDisposed()) {
emitter.onError(e); // here's the problem
}
}
现在的问题是 ApolloException
不为空,还要检查实现我可以说不应该有空作为 onFailure
的参数。
callBack.onFailure(new ApolloNetworkException("Failed to execute http call", e));
那么,这个错误从何而来?
有什么想法吗?
注意:我使用的是 RxJava2,版本 2.3.4
NullPointerException
具体来自 SingleOnErrorReturn$OnErrorReturn.OnError
:
public void onError(Throwable e) {
T v;
if (valueSupplier != null) {
try {
v = valueSupplier.apply(e);
} catch (Throwable ex) {
Exceptions.throwIfFatal(ex);
observer.onError(new CompositeException(e, ex));
return;
}
} else {
v = value;
}
if (v == null) {
NullPointerException npe = new NullPointerException("Value supplied was null"); // This is the exception you're hitting
npe.initCause(e);
observer.onError(npe);
return;
}
它抱怨的 v
是实际传递给 onErrorReturn(T value)
运算符的 value
。传的value
是null
,这是不允许的
所以我会在 t.mypackage.data.source.aws.LegDataSourceLegsListener.onFailure
下游寻找一个 onErrorReturn
运算符,它采用 null
值。根据堆栈跟踪,它看起来会出现在 .delaySubscription(Completable)
运算符之后。