まず最初に、何をしようとしているのか説明しようとします。 RxJavaで新しくなったので、まだ学習が自由になり、あなたの意見を聞くことができました。RxJava onError Looper.prepare()を呼び出していないスレッド内でハンドラを作成できません
私はサーバーからネットワークAPIを呼び出しています。リクエストを開始するときにローダー(スピナー)を呼び出すと、終了したらエラーが表示されます。 私はこの一般的なすべての私の要求のためにObservableとオブザーバをパラメータから取得します。このメソッドでは、私はちょうど非表示とローダーを表示する気になります。
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);
}
私は、ダイアログ
を表示する方法を持っています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
スタックトレースを含める必要があります。そうしないと、例外がどこから発生したかは誰にもわかりません。 – Kiskae