2015-10-08 8 views
8

RxJava 1.0.14 ile Retrofit 2.0.0-beta2 kullanıyorum. Ben doFinally bazı kod yürütmesine gerek çünkü hataları bu şekilde işlemek:Observable.empty(), java.util.NoSuchElementException neden olur: Sıra hiçbir eleman içermez

.onErrorResumeNext(Observable.empty());

Ama yığın izlemesinde hiçbir Derslerimi ile benim app çöker bir hata (örneğin 401) ile bir http yanıtı alınca . Observable.never kullanılırsa kötü bir şey olmaz. İşte tam yığın izleme: Ayrıca first() kolaylık operatörüdür Bu take(1).single() eşittir

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) 

sayesinde
Anton yığın izleme itibaren

cevap

29

,

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

. Sonunu kullandığınızdan şüpheliyim, ama her ikisi de en az bir eleman gerektirir.

empty() kullanarak, aşağı akışlı işleçlerin sözleşmesini ihlal eden hiçbir öğeye sahip olmayan bir gözlem oluşturuyorsunuz. onErrorResumeNext'da varsayılan bir öğeyi görüntülenebilir ya da herhangi bir öğe içermeyen akışları desteklemek için aşağı akış kodunuzu değiştirin.

+1

Gerçekten, ilk() kullanıyorum, derin teşekkürler! –

+0

Aynı problemim var. (-> new ArrayList () throwable) \t \t .first (veri -!> Veri = null && veri Ama 'Observable.concat (mDatabaseObs, mRetrofitObs, mLastObs) .onErrorReturn boş Listesini dönen. isEmpty()) ' Anlayışım için mRetrofitObs bir hata attıktan sonra boş bir liste vermelidir, ilk önce bu boş listeyi bulabilir ve bir sonraki listeye geçebilirsiniz. –

+0

Eski iş parçacığı, ama merak ediyorum .onErrorResumeNext (Observable.never()) bu sorunu çözebilir mi? – Incinerator

İlgili konular