RxJava onError 无法在未调用 Looper.prepare() 的线程内创建处理程序

RxJava onError Can't create handler inside thread that has not called Looper.prepare()

首先我会尝试解释我想做什么,接下来你会看到我在做什么(代码)。 由于我是 RxJava 的新手,而且还在学习,所以请随意给我你的意见。

所以,我从服务器调用网络 API,当开始请求时我调用加载器(微调器),完成后我隐藏它,当我收到错误时也是如此。 我希望我的所有请求都具有这种通用性,因此我可以从参数中获取 Observable 和 Observer。在这个方法上,我只关心隐藏和显示加载器。

OnError(这里是技巧部分),我也试图显示一个对话框,但我得到了你可以在标题上看到的错误。 无法在尚未调用 Looper.prepare()

的线程内创建处理程序

这是代码..

protected void makeMyrequest(MyBaseActivity myBaseActivity, Observable observable, Observer observer) {

    mSubscription = observable
            .doOnRequest(new Action1<Long>() {
                @Override
                public void call(Long aLong) {

                    Log.d(TAG, "On request");
                    myBaseActivity.showLoader();
                }
            })
            .doOnCompleted(new Action0() {
                @Override
                public void call() {
                    Log.d(TAG, "onCompleted: Hide spinner");
                    myBaseActivity.hideLoader();
                    mSubscription.unsubscribe();
                }
            })
            .doOnError(new Action1<Throwable>() {
                @Override
                public void call(Throwable throwable) {

                    Log.d(TAG, "onError: Hide spinner");
                        myBaseActivity.showAlertDialog("error");
                        myBaseActivity.hideLoader();

                                        }
            })
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(observer);
}

在我的基地activity我有一个显示对话框的方法

public void showAlertDialog(String message) {

    mDialog = new AlertDialog.Builder(this)
            .setMessage(message)
            .show();
}

来自 stacktracer 的重要部分

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
                                                                                at android.os.Handler.<init>(Handler.java:200)
                                                                                at android.os.Handler.<init>(Handler.java:114)
                                                                                at android.app.Dialog.<init>(Dialog.java:119)
                                                                                at android.app.Dialog.<init>(Dialog.java:168)
                                                                                at android.support.v7.app.AppCompatDialog.<init>(AppCompatDialog.java:43)
                                                                                at android.support.v7.app.AlertDialog.<init>(AlertDialog.java:95)
                                                                                at android.support.v7.app.AlertDialog$Builder.create(AlertDialog.java:927)
                                                                                at android.support.v7.app.AlertDialog$Builder.show(AlertDialog.java:952)
                                                                                at xx.myapp.MyBaseActivity.showAlertDialog

您需要在 doOnRequest 之前致电 observeOn(AndroidSchedulers.mainThread())observeOn 适用于调用链中他之后的所有操作员。在您的情况下引发了异常,因为您正试图在主线程之外创建一个对话框。