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

时间:2017-11-29 15:40:21

标签: android rx-android

收到此消息时出现错误

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

1 个答案:

答案 0 :(得分:2)

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