Skip to content

IllegalStateException onError #79

Description

@crossle
java.lang.IllegalStateException: Exception thrown on Scheduler.Worker thread. Add `onError` handling.

use Rxjava 1.0.0 and RxAndroid lastest version.

Activity

  1. mttkay commented on Nov 24, 2014

    @mttkay
    Collaborator

    Have you tried doing what the message suggests, add an onError hook? You probably subscribed without an error hook, and an error occurred...

  2. crossle commented on Dec 5, 2014

    @crossle
    Author

    Added onError i used this function

     public 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);
                }
    
            });
        }
    
  3. mttkay commented on Dec 5, 2014

    @mttkay
    Collaborator

    There is nothing actionable here for me. Can you add more context? What is it you're trying to do?

  4. crossle commented on Dec 9, 2014

    @crossle
    Author

    I no reproduce this error, only on Google play crash log.

  5. mttkay commented on Dec 9, 2014

    @mttkay
    Collaborator

    That doesn't help me.

  6. crossle commented on Dec 22, 2014

    @crossle
    Author

    @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)
    
  7. zsxwing commented on Dec 22, 2014

    @zsxwing
    Member

    @crossle could you provide the operators related to this bug?

  8. hamidp commented on Dec 22, 2014

    @hamidp
    Contributor

    @crossle

    Your APIErrorHandler throws. Think of onError as your catch. If you throw inside a catch what happens?

  9. crossle commented on Dec 22, 2014

    @crossle
    Author

    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 ?

  10. hamidp commented on Dec 22, 2014

    @hamidp
    Contributor

    Where's your APIErrorHandler referenced?

  11. crossle commented on Dec 22, 2014

    @crossle
    Author
      RestAdapter.Builder builder = new RestAdapter.Builder().setEndpoint(API_ROOT)
                    .setErrorHandler(new  APIErrorHandler()).setRequestInterceptor(mRequestInterceptor).setClient(new OkClient(ok));
    
  12. crossle commented on Dec 23, 2014

    @crossle
    Author

    @mttkay please reopen this issue.
    @hamidp @zsxwing How about this issue?

  13. crossle commented on Dec 24, 2014

    @crossle
    Author

    @JakeWharton Look like Retrofit error.

  14. luccasmaso commented on Sep 17, 2015

    @luccasmaso

    @crossle did you fix it?

  15. crossle commented on Sep 18, 2015

    @crossle
    Author
  16. AndreiD commented on Dec 7, 2015

    @AndreiD

    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'
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions