Repository navigation
IllegalStateException onError #79
Description
Activity
Have you tried doing what the message suggests, add an
onErrorhook? You probably subscribed without an error hook, and an error occurred...Added
onErrori used this functionpublic final Subscription subscribe(final Action1<? super T> onNext, final Action1<Throwable> onError) { if (onNext == null) { throw new IllegalArgumentException("onNext can not be null"); } if (onError == null) { throw new IllegalArgumentException("onError can not be null"); } return subscribe(new Subscriber<T>() { @Override public final void onCompleted() { // do nothing } @Override public final void onError(Throwable e) { onError.call(e); } @Override public final void onNext(T args) { onNext.call(args); } }); }There is nothing actionable here for me. Can you add more context? What is it you're trying to do?
I no reproduce this error, only on Google play crash log.
That doesn't help me.
@mttkay Sure this error, I use Retrofit, RxJava, RxAndroid on Android, when invoke NoConnectionException, the app crash. please fix.
private class APIErrorHandler implements ErrorHandler { @Override public Throwable handleError(RetrofitError cause) { if (cause.getKind() == Kind.NETWORK) { if (cause.getCause() instanceof SocketTimeoutException) { return new ConnectionTimeoutException(); } else { return new NoConnectionException(); } } }E/AndroidRuntime(22087): Process: com.oxa7.shou, PID: 22087 E/AndroidRuntime(22087): java.lang.IllegalStateException: Exception thrown on Scheduler.Worker thread. Add `onError` handling. E/AndroidRuntime(22087): at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:52) E/AndroidRuntime(22087): at android.os.Handler.handleCallback(Handler.java:739) E/AndroidRuntime(22087): at android.os.Handler.dispatchMessage(Handler.java:95) E/AndroidRuntime(22087): at android.os.Looper.loop(Looper.java:135) E/AndroidRuntime(22087): at android.app.ActivityThread.main(ActivityThread.java:5221) E/AndroidRuntime(22087): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(22087): at java.lang.reflect.Method.invoke(Method.java:372) E/AndroidRuntime(22087): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) E/AndroidRuntime(22087): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) E/AndroidRuntime(22087): Caused by: rx.exceptions.OnErrorNotImplementedException E/AndroidRuntime(22087): at rx.Observable$31.onError(Observable.java:7069) E/AndroidRuntime(22087): at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:154) E/AndroidRuntime(22087): at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:111) E/AndroidRuntime(22087): at rx.android.operators.OperatorConditionalBinding$1.onError(OperatorConditionalBinding.java:66) E/AndroidRuntime(22087): at rx.internal.operators.NotificationLite.accept(NotificationLite.java:147) E/AndroidRuntime(22087): at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.pollQueue(OperatorObserveOn.java:177) E/AndroidRuntime(22087): at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.access$000(OperatorObserveOn.java:65) E/AndroidRuntime(22087): at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber$2.call(OperatorObserveOn.java:153) E/AndroidRuntime(22087): at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:47) E/AndroidRuntime(22087): ... 8 more E/AndroidRuntime(22087): Caused by: xxxx.api.BaseAPI$NoConnectionException E/AndroidRuntime(22087): at xxx.api.BaseAPI$APIErrorHandler.handleError(BaseAPI.java:86) E/AndroidRuntime(22087): at retrofit.RxSupport$2.run(RxSupport.java:59) E/AndroidRuntime(22087): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) E/AndroidRuntime(22087): at java.util.concurrent.FutureTask.run(FutureTask.java:237) E/AndroidRuntime(22087): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) E/AndroidRuntime(22087): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) E/AndroidRuntime(22087): at retrofit.Platform$Android$2$1.run(Platform.java:142) E/AndroidRuntime(22087): at java.lang.Thread.run(Thread.java:818)@crossle could you provide the operators related to this bug?
Your
APIErrorHandlerthrows. Think ofonErroras your catch. If you throw inside a catch what happens?I use like this
mSubscription = AndroidObservable.bindActivity(Activity.this, xxxAPI.show(id)) .subscribe(new Action1<XX>() { @Override public void call(User user) { } }, new Action1<Throwable>() { @Override public void call(Throwable err) { Log.... } });@hamidp Catch
onError?Where's your
APIErrorHandlerreferenced?RestAdapter.Builder builder = new RestAdapter.Builder().setEndpoint(API_ROOT) .setErrorHandler(new APIErrorHandler()).setRequestInterceptor(mRequestInterceptor).setClient(new OkClient(ok));@JakeWharton Look like Retrofit error.
@crossle did you fix it?
@luccasmaso No
remove the APIErrorHandler and call it like this:
the_observable.subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .map(mPojo -> " abc: " + mPojo.whatever()) .subscribe(current -> { Log.e("Output is", current.toString()); }, throwable -> Log.e("Error", throwable.getMessage()));I'm using:
compile 'io.reactivex:rxandroid:1.0.1' compile 'io.reactivex:rxjava:1.0.16' compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2'
use Rxjava 1.0.0 and RxAndroid lastest version.