Encontrar falta onError en el proyecto
Estoy tratando de localizar una falta onError()
en un proyecto. Significa que la aplicación se bloquea porque una suscripción no maneja los objetos desechables así que quiero localizar esa subcripción y agregar el método onError.
Desafortunadamente el stacktrace no es realmente útil aquí y solo muestra la línea del throw new IOException
pero nada más:
- AndroidRX - ejecuta el método en segundo plano
- Prueba de Android Realm con RxJava - "abierto desde un hilo sin un Looper" Excepción
- Android gestiona la solicitud múltiple rxJava en el dispositivo de rotación
- ¿Cómo se muestra spinner si RxJava observable toma mucho tiempo?
- RXJava - hacer un observable pausable (con buffer y ventana, por ejemplo)
FATAL EXCEPTION: main Process: my.app.example.dev, PID: 20309 java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.Worker thread. at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:54) 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(Native Method) 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) Caused by: rx.exceptions.OnErrorFailedException: Error occurred when trying to propagate error to Observer.onError at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:201) at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:111) at rx.android.app.OperatorConditionalBinding$1.onError(OperatorConditionalBinding.java:69) at rx.internal.operators.NotificationLite.accept(NotificationLite.java:147) at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.pollQueue(OperatorObserveOn.java:177) at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.access$000(OperatorObserveOn.java:65) at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber$2.call(OperatorObserveOn.java:153) at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:47) 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(Native Method) 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) Caused by: rx.exceptions.CompositeException: 2 exceptions occurred. at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:201) at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:111) at rx.android.app.OperatorConditionalBinding$1.onError(OperatorConditionalBinding.java:69) at rx.internal.operators.NotificationLite.accept(NotificationLite.java:147) at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.pollQueue(OperatorObserveOn.java:177) at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.access$000(OperatorObserveOn.java:65) at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber$2.call(OperatorObserveOn.java:153) at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:47) 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(Native Method) 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) Caused by: rx.exceptions.CompositeException$CompositeExceptionCausalChain: Chain of Causes for CompositeException In Order Received => at com.splunk.mint.ExceptionHandler.uncaughtException(ExceptionHandler.java:42) at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693) at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690) at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:58) 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(Native Method) 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) Caused by: retrofit.RetrofitError: java.io.IOException: No connectivity at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:385) at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:221) at retrofit.RestAdapter$RestHandler$1.call(RestAdapter.java:271) at retrofit.RestAdapter$RestHandler$1.call(RestAdapter.java:269) at retrofit.RxSupport$2.run(RxSupport.java:46) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) at java.util.concurrent.FutureTask.run(FutureTask.java:237) 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) Caused by: java.io.IOException: No connectivity at my.app.example.manager.ApiManager$NetworkAwareOKClient.execute(ApiManager.java:1071) at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:322) at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:221) at retrofit.RestAdapter$RestHandler$1.call(RestAdapter.java:271) at retrofit.RestAdapter$RestHandler$1.call(RestAdapter.java:269) at retrofit.RxSupport$2.run(RxSupport.java:46) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) at java.util.concurrent.FutureTask.run(FutureTask.java:237) 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)
¿Alguna idea para localizar la suscripción (línea en código) que no tiene el onError()
?
- Rxandroid pide que se ejecute en el hilo ui aunque esté suscrito en AndroidSchedulers.mainThread ()
- RxJava / Android: Combina el resultado de dos dependientes dependientes
- Encadenar dos observables de adaptación con RxJava
- Manejar Error de red con Retrofit observable
- RxAndroid: cambios de interfaz de usuario en el subproceso Schedulers.io ()
- Observable.just () que devuelve Unidad en Kotlin
- InterruptedIOException al cambiar de mainThread () a io ()
- Cómo utilizar CompositeDisposable de RxJava 2?
Esto puede ser un dolor para depurar. Curiosamente tuve un error dentro de la Action1<Throwable>
[facepalm].
Lo mejor era depurar esto es registrar un manejador de errores global. Esto le vio la verdad en su código:
RxJavaPlugins.getInstance().registerErrorHandler(new RxJavaErrorHandler() { @Override public void handleError(Throwable e) { Log.w("Error",e); } });
Una discusión sobre github: https://github.com/ReactiveX/RxJava/issues/2293
Si el onError no está implementado, RxJava lanzará una excepción OnErrorNotImplementedException
. Parece que RxJava no ha llamado al método onError
("Error al intentar propagar el error a Observer.onError")
Puede intentar registrar un manejador de errores para encontrar la excepción raíz.
static { RxJavaPlugins.getInstance().registerErrorHandler(new RxJavaErrorHandler() { @Override public void handleError(Throwable e) { e.printStackTrace(); } }); }
- OkHttp en android para realizar solicitudes de red
- Android Adjuntar un archivo a GMAIL – No se puede adjuntar archivo vacío