RxJava manejador de error pnetworkingeterminado

Lo sentimos, ¿existe la posibilidad de configurar el controller de error pnetworkingeterminado en RxJava?

Por ejemplo, yo código en el file Utils.kt :

 fun BaseFragment.callGallery(view: View){ view.clicks().bindToLifecycle(this).subscribe { RxPaparazzo.takeImage(this) .usingGallery() .subscribe { response -> throw RuntimeException("Where is this exception from?") } } } 

Pero en stacktrace no hay ninguna pista sobre Utils.kt o sobre cualquiera de mis files.

Entiendo que puedo configurar onError en cada suscriptor. con código como:

 .subscribe ({ response -> .... }, { it.printStackTrace() }) 

Pero preferiría establecer un error pnetworkingeterminado enError para todos los suscriptores. ¿Cómo puedo hacerlo?

Stacktrace:

 05-07 12:11:48.246 10966-10966/ru.egslava.rxfluxtest E/AndroidRuntime: FATAL EXCEPTION: main Process: ru.egslava.rxfluxtest, PID: 10966 java.lang.RuntimeException: Unable to destroy activity {ru.egslava.rxfluxtest/rx_activity_result.HolderActivity}: rx.exceptions.OnErrorNotImplementedException: Where is this exception from? at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3831) at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3849) at android.app.ActivityThread.-wrap5(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1398) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: rx.exceptions.OnErrorNotImplementedException: Where is this exception from? at rx.internal.util.InternalObservableUtils$ErrorNotImplementedAction.call(InternalObservableUtils.java:374) at rx.internal.util.InternalObservableUtils$ErrorNotImplementedAction.call(InternalObservableUtils.java:371) at rx.internal.util.ActionSubscriber.onError(ActionSubscriber.java:44) at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:157) at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:120) at rx.exceptions.Exceptions.throwOrReport(Exceptions.java:204) at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:144) at rx.internal.operators.OperatorOnErrorResumeNextViaFunction$4.onNext(OperatorOnErrorResumeNextViaFunction.java:153) at rx.internal.operators.OperatorMap$MapSubscriber.onNext(OperatorMap.java:74) at rx.internal.operators.OperatorMerge$MergeSubscriber.emitScalar(OperatorMerge.java:391) at rx.internal.operators.OperatorMerge$MergeSubscriber.tryEmit(OperatorMerge.java:353) at rx.internal.operators.OperatorMerge$InnerSubscriber.onNext(OperatorMerge.java:838) at rx.observers.Subscribers$5.onNext(Subscribers.java:229) at rx.internal.operators.OperatorZip$Zip.tick(OperatorZip.java:264) at rx.internal.operators.OperatorZip$Zip$InnerSubscriber.onNext(OperatorZip.java:335) at rx.internal.operators.OperatorMap$MapSubscriber.onNext(OperatorMap.java:74) at rx.internal.util.ScalarSynchronousObservable$WeakSingleProducer.request(ScalarSynchronousObservable.java:268) at rx.Subscriber.setProducer(Subscriber.java:211) at rx.internal.operators.OperatorMap$MapSubscriber.setProducer(OperatorMap.java:99) at rx.internal.util.ScalarSynchronousObservable$1.call(ScalarSynchronousObservable.java:79) at rx.internal.util.ScalarSynchronousObservable$1.call(ScalarSynchronousObservable.java:75) at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50) at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) at rx.Observable.unsafeSubscribe(Observable.java:8452) at rx.internal.operators.OperatorZip$Zip.start(OperatorZip.java:214) at rx.internal.operators.OperatorZip$ZipSubscriber.onNext(OperatorZip.java:156) at rx.internal.operators.OperatorZip$ZipSubscriber.onNext(OperatorZip.java:122) at rx.internal.util.ScalarSynchronousObservable$WeakSingleProducer.request(ScalarSynchronousObservable.java:268) at rx.Subscriber.setProducer(Subscriber.java:209) at rx.internal.util.ScalarSynchronousObservable$1.call(ScalarSynchronousObservable.java:79) at rx.internal.util.ScalarSynchronousObservable$1.call(ScalarSynchronousObservable.java:75) at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50) at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) at rx.Observable.unsafeSubscribe(Observable.java:8452) at rx.internal.util.ScalarSynchronousObservable$4.call(ScalarSynchronousObservable.java:227) at rx.internal.util.ScalarSynchronousObservable$4.call(ScalarSynchronousObservable.java:220) at rx.Observable.unsafeSubscribe(Observable.java:8452) at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:248) 

RxJava tiene complementos para admitir muy bien las preocupaciones transversales. En particular, RxJavaErrorHandler está RxJavaErrorHandler a adjuntar un comportamiento global de event handling errores de la siguiente manera:

 RxJavaPlugins.getInstance().registerErrorHandler(object : RxJavaErrorHandler() { override fun handleError(e: Throwable?) { println("Global error handler: $e") } }) Observable.just(1).concatMap({ Observable.error<Int>(Exception("Just throwing $it")) }) .subscribe({ println("I'll not be called") }, { println("Specific error handler: $it") }) 

El código anterior se imprimiría:

 Error occurnetworking java.lang.Exception: Just throwing 1 A default error handler: java.lang.Exception: Just throwing 1 

Sospecho que también estaría interesado en mejorar la información de diagnóstico disponible en stacktraces cuando tenga un error no controlado. Para eso hay un RxJavaStackTracer que cuando se usa RxJavaPlugins.getInstance().registerObservableExecutionHook(RxJavaStackTracer()) aumenta la información de seguimiento de la stack. El tema StackTraces y subscribeOn / observeOn en github es una buena lectura sobre el tema.

Puede usar el operador onErrorResumeNext . Ejemplo de uso:

 fun BaseFragment.callGallery(view: View){ view .clicks() .bindToLifecycle(this) .onErrorResumeNExt { err -> log(err); Observable.empty() } .subscribe { // do stuff } } 
  • Retrofit2 y kotlin
  • Invoque RxJava2 cancelable / desechable del hilo correcto
  • RxJava usando Kotlin - cómo sincronizar 2 methods asíncronos, refactorizar desde Java
  • Cómo llenar una vista de list usando Kotlin, retroadaptación y RXjava
  • Combina Rx Singles en Observables recursivamente
  • MVP + RxJava - ¿Poner los progtwigdores en el presentador o en el interaccionador?
  • Repetir acciones en estado con RxJava
  • Se llama a Android RxJava onNext incluso cuando se anula la suscripción del observador
  • ¿Cómo se coordina una list de ejecuciones Completables con RxJava?
  • ¿Cómo get respuesta en la retroadaptación al usar rxAndroid?
  • Cómo contar el time de ejecución de lo observable