【问题标题】:RXJava/RXAndroid - Can't create handler inside thread that has not called Looper.prepare()RXJava/RXAndroid - 无法在未调用 Looper.prepare() 的线程内创建处理程序
【发布时间】:2018-05-13 09:12:27
【问题描述】:

当您收到有关此消息的错误时

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

【问题讨论】:

  • 问题在哪里?
  • 这就是当您使用 rxjava/rxAndroid 收到该错误时该怎么做

标签: android rx-android


【解决方案1】:

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

【讨论】:

  • 是的,你是对的。我将更新答案。谢谢
猜你喜欢
  • 2015-11-07
  • 2017-01-13
  • 2017-10-24
  • 1970-01-01
  • 2012-08-15
  • 2011-09-06
  • 1970-01-01
相关资源
最近更新 更多