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

3
当您收到此错误消息时:
rx.exceptions.OnErrorFailedException:尝试将错误传播到Observer.onError时发生错误,
但是您的订阅已经在处理onError。
MyMethodThatRetunsAnObservable(string)
        .subscribe(
            response -> handleResponse(response),
            throwable -> handleError(throwable));

如果是由于 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 引起的,需注意 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
问题在哪里? - A. Shevchuk
这只是在使用RxJava/RxAndroid时收到错误时要做的事情。 - Mara Jimenez
1个回答

2

是的,你遇到了错误。你应该调用subscribeOn(AndroidSchedulers.mainThread())而不是observerOn。显示日志函数在observerOn之前被调用,并在onSubscribe方法中被调用。


是的,你说得对。我会更新答案。谢谢。 - Mara Jimenez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接