2015-10-08 33 views
8

RxJava 1.0.14でRetrofit 2.0.0-beta2を使用しています。私はdoFinallyにいくつかのコードを実行する必要があるため、エラーをこのように扱う:Observable.empty()の原因java.util.NoSuchElementException:シーケンスに要素がありません

.onErrorResumeNext(Observable.empty());

をしかし、私は、スタックトレースでいない私のクラスで私のアプリがクラッシュするエラー(例えば401)とHTTPレスポンスを取得するとき。 Observable.neverを使用すると悪いことはありません。ここでは、完全なスタックトレースです。また、first()便利な演算子です。これは、take(1).single()に相当

java.lang.IllegalStateException: Exception thrown on Scheduler.Worker thread. Add `onError` handling. 
at rx.internal.schedulers.ScheduledAction.run (ScheduledAction.java:60) 
at android.os.Handler.handleCallback (Handler.java:739) 
at android.os.Handler.dispatchMessage (Handler.java:95) 
at android.os.Looper.loop (Looper.java:135) 
at android.app.ActivityThread.main (ActivityThread.java:5221) 
at java.lang.reflect.Method.invoke (Unknown source) 
at java.lang.reflect.Method.invoke (Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:899) 
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:694) 

rx.exceptions.OnErrorNotImplementedException: Sequence contains no elements 
at rx.Observable$27.onError (Observable.java:7535) 
at rx.observers.SafeSubscriber._onError (SafeSubscriber.java:154) 
at rx.observers.SafeSubscriber.onError (SafeSubscriber.java:111) 
at rx.internal.operators.OperatorDoOnEach$1.onError (OperatorDoOnEach.java:70) 
at rx.internal.operators.OperatorDoOnEach$1.onError (OperatorDoOnEach.java:70) 
at rx.internal.operators.OperatorDoOnEach$1.onError (OperatorDoOnEach.java:70) 
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.pollQueue (OperatorObserveOn.java:197) 
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber$2.call (OperatorObserveOn.java:170) 
at rx.internal.schedulers.ScheduledAction.run (ScheduledAction.java:55) 
at android.os.Handler.handleCallback (Handler.java:739) 
at android.os.Handler.dispatchMessage (Handler.java:95) 
at android.os.Looper.loop (Looper.java:135) 
at android.app.ActivityThread.main (ActivityThread.java:5221) 
at java.lang.reflect.Method.invoke (Unknown source) 
at java.lang.reflect.Method.invoke (Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:899) 
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:694) 

java.util.NoSuchElementException: Sequence contains no elements 
at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted (OperatorSingle.java:131) 
at rx.internal.operators.OperatorTake$1.onCompleted (OperatorTake.java:53) 
at rx.Observable$EmptyHolder$1.call (Observable.java:1077) 
at rx.Observable$EmptyHolder$1.call (Observable.java:1074) 
at rx.Observable.unsafeSubscribe (Observable.java:7710) 
at rx.internal.operators.OperatorOnErrorResumeNextViaObservable$1.onError (OperatorOnErrorResumeNextViaObservable.java:76) 
at rx.internal.operators.OperatorDoOnEach$1.onError (OperatorDoOnEach.java:70) 
at rx.internal.operators.OperatorSubscribeOn$1$1$1.onError (OperatorSubscribeOn.java:71) 
at rx.observers.SerializedObserver.onError (SerializedObserver.java:159) 
at rx.observers.SerializedSubscriber.onError (SerializedSubscriber.java:79) 
at rx.internal.operators.OperatorTakeUntil$1.onError (OperatorTakeUntil.java:49) 
at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError (OperatorMerge.java:239) 
at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate (OperatorMerge.java:774) 
at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop (OperatorMerge.java:532) 
at rx.internal.operators.OperatorMerge$MergeSubscriber.emit (OperatorMerge.java:521) 
at rx.internal.operators.OperatorMerge$InnerSubscriber.onError (OperatorMerge.java:808) 
at rx.Observable$ThrowObservable$1.call (Observable.java:9600) 
at rx.Observable$ThrowObservable$1.call (Observable.java:9590) 
at rx.Observable.unsafeSubscribe (Observable.java:7710) 
at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext (OperatorMerge.java:231) 
at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext (OperatorMerge.java:140) 
at rx.internal.operators.OperatorMap$1.onNext (OperatorMap.java:55) 
at retrofit.RxJavaCallAdapterFactory$CallOnSubscribe.call (RxJavaCallAdapterFactory.java:113) 
at retrofit.RxJavaCallAdapterFactory$CallOnSubscribe.call (RxJavaCallAdapterFactory.java:88) 
at rx.Observable$2.call (Observable.java:162) 
at rx.Observable$2.call (Observable.java:154) 
at rx.Observable$2.call (Observable.java:162) 
at rx.Observable$2.call (Observable.java:154) 
at rx.Observable$2.call (Observable.java:162) 
at rx.Observable$2.call (Observable.java:154) 
at rx.Observable.unsafeSubscribe (Observable.java:7710) 
at rx.internal.operators.OperatorSubscribeOn$1$1.call (OperatorSubscribeOn.java:62) 
at rx.internal.schedulers.ScheduledAction.run (ScheduledAction.java:55) 
at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:422) 
at java.util.concurrent.FutureTask.run (FutureTask.java:237) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201 (ScheduledThreadPoolExecutor.java:152) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run (ScheduledThreadPoolExecutor.java:265) 
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1112) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:587) 
at java.lang.Thread.run (Thread.java:818) 

おかげで、
アントンスタックトレースから

答えて

29

at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted (OperatorSingle.java:131) 
at rx.internal.operators.OperatorTake$1.onCompleted (OperatorTake.java:53) 

。私はあなたが後者を使用していると思われますが、どちらも少なくとも1つの要素が必要です。

empty()を使用すると、下流の演算子の契約に違反する要素のない観測値を作成しています。観測可能なonErrorResumeNextの既定のアイテムを放出するか、下流のコードを変更して要素のないストリームをサポートしてください。

+1

本当に、私はfirst()、深く感謝しています! –

+0

私は同じ問題があります。しかし、空のリストを 'Observable.concat(mDatabaseObs、mRetrofitObs、mLastObs).onErrorReturn(throwable - > new ArrayList ()) \t \t .first(data - > data!= null &&!data)に戻しています。 mRetrofitObsがエラーをスローすると、空のリストを見つけて、最初にこの空のリストを見つけて次のリストに移動します。 –

+0

古いスレッドですが、.onErrorResumeNext(Observable.never())がこの問題を解決するかどうか疑問に思っていますか? – Incinerator

関連する問題