Сначала я попытаюсь объяснить, что я пытаюсь сделать, а затем вы увидите, что я делаю (код). С тех пор, как я новый в RxJava, и все еще учился, я дал вам свое мнение.RxJava onError Невозможно создать обработчик внутри потока, который не вызвал Looper.prepare()
Таким образом, im вызывает сетевой API с сервера, а при запуске запроса я вызываю загрузчик (spinner), когда заканчиваю, я скрываю его и тот же, когда получаю сообщение об ошибке. Я бы хотел, чтобы этот родовой для всех моих запросов, поэтому я получаю Observable и Observer из параметра. По этому методу я просто забочусь о спрятателе и загрузчике.
OnError (и вот трюк), im пытается показать диалог тоже, но я получил ошибку, которую вы можете увидеть по названию. Невозможно создать обработчик внутри потока, который не под названием 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