RXJava/RXAndroid - 无法在未调用 Looper.prepare() 的线程内创建处理程序

RXJava/RXAndroid - Can't create handler inside thread that has not called Looper.prepare()

当您收到此消息的错误时

rx.exceptions.OnErrorFailedException:尝试将错误传播到 Observer.onError

时出错

但是您的订阅已经在处理 onError

MyMethodThatRetunsAnObservable(string)
        .subscribe(
            response -> handleResponse(response),
            throwable -> handleError(throwable));

如果由以下原因引起:java.lang.RuntimeException:无法在未调用 Looper.prepare()

的线程内创建处理程序

请注意,如果 Scheduler 是真正异步的,onError 通知将在发射线程上先于 onNext 通知。所以需要指定我们要观察的UI线程

public static void shortToast(String msg) {
    Observable.just(msg)
            .subscribeOn(AndroidSchedulers.mainThread())
            .subscribe(message -> {
                Toast.makeText(App.getInstance(), message, Toast.LENGTH_SHORT).show();
            });
}

是的,您遇到了错误。您应该调用 subscribeOn(AndroidSchedulers.mainThread() 而不是 observerOn。 show log函数在observerOn之前调用,在onSubcribe方法中调用。