Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IllegalStateException onError #79

Closed
crossle opened this issue Nov 24, 2014 · 16 comments
Closed

IllegalStateException onError #79

crossle opened this issue Nov 24, 2014 · 16 comments

Comments

@crossle
Copy link

crossle commented Nov 24, 2014

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

use Rxjava 1.0.0 and RxAndroid lastest version.

@mttkay
Copy link
Collaborator

mttkay commented Nov 24, 2014

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

@crossle
Copy link
Author

crossle commented Dec 5, 2014

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);
            }

        });
    }

@mttkay
Copy link
Collaborator

mttkay commented Dec 5, 2014

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

@crossle
Copy link
Author

crossle commented Dec 9, 2014

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

@mttkay
Copy link
Collaborator

mttkay commented Dec 9, 2014

That doesn't help me.

@mttkay mttkay closed this as completed Dec 9, 2014
@crossle
Copy link
Author

crossle commented Dec 22, 2014

@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)

@zsxwing
Copy link
Member

zsxwing commented Dec 22, 2014

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

@hamidp
Copy link
Contributor

hamidp commented Dec 22, 2014

@crossle

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

@crossle
Copy link
Author

crossle commented Dec 22, 2014

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 ?

@hamidp
Copy link
Contributor

hamidp commented Dec 22, 2014

Where's your APIErrorHandler referenced?

@crossle
Copy link
Author

crossle commented Dec 22, 2014

  RestAdapter.Builder builder = new RestAdapter.Builder().setEndpoint(API_ROOT)
                .setErrorHandler(new  APIErrorHandler()).setRequestInterceptor(mRequestInterceptor).setClient(new OkClient(ok));

@crossle
Copy link
Author

crossle commented Dec 23, 2014

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

@crossle
Copy link
Author

crossle commented Dec 24, 2014

@JakeWharton Look like Retrofit error.

@luccasmaso
Copy link

@crossle did you fix it?

@crossle
Copy link
Author

crossle commented Sep 18, 2015

@luccasmaso No

@AndreiD
Copy link

AndreiD commented Dec 7, 2015

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
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants