Retrofit: OnErrorFailedException

Created on 2 Dec 2016  Â·  4Comments  Â·  Source: square/retrofit

HI,

From the online version, print log,I do not know where the problem lies,Can you help me look down:

java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.Worker thread.
rx.android.schedulers.LooperScheduler$ScheduledAction.run(Unknown Source)
android.os.Handler.handleCallback(Handler.java:739)
android.os.Handler.dispatchMessage(Handler.java:95)
android.os.Looper.loop(Looper.java:135)
android.app.ActivityThread.main(ActivityThread.java:5371)
java.lang.reflect.Method.invoke(Native Method)
java.lang.reflect.Method.invoke(Method.java:372)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1125)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:809)
Caused by : rx.exceptions.OnErrorFailedException: Error occurred when trying to propagate error to Observer.onError
rx.observers.SafeSubscriber._onError(Unknown Source)
rx.observers.SafeSubscriber.onError(Unknown Source)
rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(Unknown Source)
rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(Unknown Source)
rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(Unknown Source)
rx.internal.operators.OperatorMerge$MergeSubscriber.emit(Unknown Source)
rx.internal.operators.OperatorMerge$MergeSubscriber.onError(Unknown Source)
rx.internal.operators.OperatorMap$MapSubscriber.onError(Unknown Source)
rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.checkTerminated(Unknown Source)
rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.call(Unknown Source)
Caused by : rx.exceptions.OnErrorFailedException: Error occurred when trying to propagate error to Observer.onError
Caused by : rx.exceptions.OnErrorFailedException: Error occurred when trying to propagate error to Observer.onError
Caused by : rx.exceptions.OnErrorFailedException: Error occurred when trying to propagate error to Observer.onError
Caused by : rx.exceptions.OnErrorFailedException: Error occurred when trying to propagate error to Observer.onError

In the development time, which encountered one,log:
UncaughtException detected: java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.Worker thread.
at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:114)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7237)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: rx.exceptions.OnErrorFailedException: Error occurred when trying to propagate error to Observer.onError
at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:192)
at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:120)
at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:268)
at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:812)
at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:573)
at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:562)
at rx.internal.operators.OperatorMerge$MergeSubscriber.onError(OperatorMerge.java:278)
at rx.internal.operators.OperatorMap$MapSubscriber.onError(OperatorMap.java:85)
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.checkTerminated(OperatorObserveOn.java:276)
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.call(OperatorObserveOn.java:219)
at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:107)
at android.os.Handler.handleCallback(Handler.java:739)?
at android.os.Handler.dispatchMessage(Handler.java:95)?
at android.os.Looper.loop(Looper.java:158)?
at android.app.ActivityThread.main(ActivityThread.java:7237)?
at java.lang.reflect.Method.invoke(Native Method)?
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)?
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)?
Caused by: rx.exceptions.CompositeException: 2 exceptions occurred.
at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:192)?
at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:120)?
at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:268)?
at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:812)?
at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:573)?
at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:562)?
at rx.internal.operators.OperatorMerge$MergeSubscriber.onError(OperatorMerge.java:278)?
at rx.internal.operators.OperatorMap$MapSubscriber.onError(OperatorMap.java:85)?
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.checkTerminated(OperatorObserveOn.java:276)?
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.call(OperatorObserveOn.java:219)?
at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:107)?
at android.os.Handler.handleCallback(Handler.java:739)?
at android.os.Handler.dispatchMessage(Handler.java:95)?
at android.os.Looper.loop(Looper.java:158)?
at android.app.ActivityThread.main(ActivityThread.java:7237)?
at java.lang.reflect.Method.invoke(Native Method)?
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)?
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)?
Caused by: rx.exceptions.CompositeException$CompositeExceptionCausalChain: Chain of Causes for CompositeException In Order Received =>
at android.util.Log.getStackTraceString(Log.java:508)
at com.tencent.smtt.utils.TbsCrashHandler.uncaughtException(Unknown Source)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:118)
at android.os.Handler.handleCallback(Handler.java:739)?
at android.os.Handler.dispatchMessage(Handler.java:95)?
at android.os.Looper.loop(Looper.java:158)?
at android.app.ActivityThread.main(ActivityThread.java:7237)?
at java.lang.reflect.Method.invoke(Native Method)?
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)?
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)?
Caused by: java.net.SocketTimeoutException: timeout
at okio.Okio$3.newTimeoutException(Okio.java:210)
at okio.AsyncTimeout.exit(AsyncTimeout.java:277)
at okio.AsyncTimeout$2.read(AsyncTimeout.java:244)
at okio.RealBufferedSource.indexOf(RealBufferedSource.java:325)
at okio.RealBufferedSource.indexOf(RealBufferedSource.java:314)
at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:210)
at okhttp3.internal.http.Http1xStream.readResponse(Http1xStream.java:186)
at okhttp3.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:127)
at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:53)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:109)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:124)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpL
11-24 12:34:54.721 26964-26964/com.zjcs.student E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.zjcs.student, PID: 26964
java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.Worker thread.
at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:114)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7237)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: rx.exceptions.OnErrorFailedException: Error occurred when trying to propagate error to Observer.onError
at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:192)
at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:120)
at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:268)
at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:812)
at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:573)
at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:562)
at rx.internal.operators.OperatorMerge$MergeSubscriber.onError(OperatorMerge.java:278)
at rx.internal.operators.OperatorMap$MapSubscriber.onError(OperatorMap.java:85)
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.checkTerminated(OperatorObserveOn.java:276)
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.call(OperatorObserveOn.java:219)
at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:107)
at android.os.Handler.handleCallback(Handler.java:739)?
at android.os.Handler.dispatchMessage(Handler.java:95)?
at android.os.Looper.loop(Looper.java:158)?
at android.app.ActivityThread.main(ActivityThread.java:7237)?
at java.lang.reflect.Method.invoke(Native Method)?
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)?
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)?
Caused by: rx.exceptions.CompositeException: 2 exceptions occurred.
at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:192)?
at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:120)?
at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:268)?
at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:812)?
at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:573)?
at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:562)?
at rx.internal.operators.OperatorMerge$MergeSubscriber.onError(OperatorMerge.java:278)?
at rx.internal.operators.OperatorMap$MapSubscriber.onError(OperatorMap.java:85)?
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.checkTerminated(OperatorObserveOn.java:276)?
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.call(OperatorObserveOn.java:219)?
at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:107)?
at android.os.Handler.handleCallback(Handler.java:739)?
at android.os.Handler.dispatchMessage(Handler.java:95)?
at android.os.Looper.loop(Looper.java:158)?
at android.app.ActivityThread.main(ActivityThread.java:7237)?
at java.lang.reflect.Method.invoke(Native Method)?
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)?
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)?
Caused by: rx.exceptions.CompositeException$CompositeExceptionCausalChain: Chain of Causes for CompositeException In Order Received =>
at android.util.Log.getStackTraceString(Log.java:508)
at com.tencent.smtt.utils.TbsCrashHandler.uncaughtException(Unknown Source)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:118)
at android.os.Handler.handleCallback(Handler.java:739)?
at android.os.Handler.dispatchMessage(Handler.java:95)?
at android.os.Looper.loop(Looper.java:158)?
at android.app.ActivityThread.main(ActivityThread.java:7237)?
at java.lang.reflect.Method.invoke(Native Method)?
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)?
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)?
Caused by: java.net.SocketTimeoutException: timeout
at okio.Okio$3.newTimeoutException(Okio.java:210)
at okio.AsyncTimeout.exit(AsyncTimeout.java:277)
at okio.AsyncTimeout$2.read(AsyncTimeout.java:244)
at okio.RealBufferedSource.indexOf(RealBufferedSource.java:325)
at okio.RealBufferedSource.indexOf(RealBufferedSource.java:314)
at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:210)
at okhttp3.internal.http.Http1xStream.readResponse(Http1xStream.java:186)
at okhttp3.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:127)
at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:53)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:109)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:124)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.logging.HttpLoggingInterceptor.intercept(Ht

All 4 comments

This is a normal timeout when your network is too slow. The problem is that you are not implementing onError when subscribing which means the timeout has nowhere to go. As such, RxJava re-throws it as OnErrorNotImplementedException which gets passed to the global plugins and crashes the app.

The fix is to always, always, _always_ supply an onError callback when subscribing to a stream.

All of my onError is shared,I checked all that, extends RxSubscriber.

public abstract class RxSubscriber extends Subscriber {

@Override
public void onCompleted() {
}

@Override
public void onError(Throwable e) {
   e.printStackTrace();
    if (e instanceof ServerException) {
        ServerException serverException = (ServerException) e;
        _onError(serverException.code, serverException.message);
    }else{
        _onError(0,e.getMessage());
    }
}


@Override
public void onNext(T t) {
    _onNext(t);
}

public abstract void _onNext(T t);

public abstract void _onError(int code,String msg);

}

Yeah it looks like inside your onError something is throwing an exception
which is causing the CompositeException.

On Thu, Dec 1, 2016 at 10:48 PM superhu notifications@github.com wrote:

All of my onError is shared,I checked all that, extends RxSubscriber.

public abstract class RxSubscriber extends Subscriber {

@Override
public void onCompleted() {
}

@Override
public void onError(Throwable e) {
e.printStackTrace();
if (e instanceof ServerException) {
ServerException serverException = (ServerException) e;
_onError(serverException.code, serverException.message);
}else{
_onError(0,e.getMessage());
}
}

@Override
public void onNext(T t) {
_onNext(t);
}

public abstract void _onNext(T t);

public abstract void _onError(int code,String msg);

}

—
You are receiving this because you modified the open/close state.

Reply to this email directly, view it on GitHub
https://github.com/square/retrofit/issues/2104#issuecomment-264366790,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAEEEbKQpR2VsHHb85x1LnaPR81_q-OFks5rD5T5gaJpZM4LCIiI
.

this may not a good idea ...

I need process all errors by a global common function , now it can't

Was this page helpful?
0 / 5 - 0 ratings