Observable.empty () hace que java.util.NoSuchElementException: Secuencia no contiene elementos

Estoy utilizando Retrofit 2.0.0-beta2 con RxJava 1.0.14. Manejo los errores de esta manera porque necesito ejecutar algún código en doFinally:

.onErrorResumeNext(Observable.empty());

Pero cuando recibo una respuesta http con un error (401 por ejemplo) mi aplicación se bloquea sin mis clases en el seguimiento de la pila. Nada malo sucede si el uso Observable.never . Aquí está el rastro completo de la pila:

 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) 

Gracias,
Anton

Desde el seguimiento de la pila,

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

Esto equivale a take(1).single() que es también el first() operador de conveniencia first() . Sospecho que está utilizando este último, pero ambos requieren al menos un elemento.

Mediante el uso de empty() , se crea un observable sin elementos que viola el contrato de los operadores de aguas abajo. Puede emitir un elemento predeterminado en el observable onErrorResumeNext o cambiar su código descendente para admitir flujos sin elementos.

  • Disminuir los clics de botón mediante Rx
  • Cómo hacer que flatMap se ejecute en un subproceso de fondo
  • Hilo predeterminado de actualización
  • Inter fragmento de comunicación utilizando rxjava
  • RxJava + retrofit, obtenga una lista y agregue información adicional para cada artículo
  • ¿Cómo administrar un DialogFragment con RxJava?
  • La llamada onNext de PublishSubject en un hilo diferente después de actualizar a Retrofit 2.0
  • RxJava- validación de formulario RxAndroid en dynamic EditText
  • Cancelar la suscripción de un rx.Single en RxJava
  • Cómo crear un objeto retrofit.Response durante las pruebas de unidad con Retrofit 2
  • Compruebe que el método se llama en onNext del suscriptor de RxJava
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.