我正在使用Retrofit 2和RxJava2调用API。如果调用失败,例如没有互联网连接等情况,我希望向用户显示错误对话框并让他重试。
由于我正在使用RxJava,我考虑使用.retryWhen(...),但是我不知道该如何做,因为它需要等待用户按下对话框上的按钮。
目前,我显示了对话框,但是在用户按下任何按钮之前就开始重试了。此外,当用户按下“取消”时,我希望不要重试调用。
以下是我目前的代码:
由于我正在使用RxJava,我考虑使用.retryWhen(...),但是我不知道该如何做,因为它需要等待用户按下对话框上的按钮。
目前,我显示了对话框,但是在用户按下任何按钮之前就开始重试了。此外,当用户按下“取消”时,我希望不要重试调用。
以下是我目前的代码:
private void displayDialog(DialogInterface.OnClickListener positive, DialogInterface.OnClickListener negative) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("Unexpected error, do you want to retry?")
.setPositiveButton("Retry", positive)
.setNegativeButton("Cancel", negative)
.show();
}
private Observable<Boolean> notifyUser() {
final PublishSubject<Boolean> subject = PublishSubject.create();
displayDialog(
(dialogInterface, i) -> subject.onNext(true),
(dialogInterface, i) -> subject.onNext(false)
);
return subject;
}
private void onClick() {
Log.d(TAG, "onClick");
getData()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.retryWhen(attempts -> {
return attempts.zipWith(
notifyUser(),
(throwable, res) -> res);
})
.subscribe(
s -> {
Log.d(TAG, "success");
});
}
retryWhen
,那么就不会再发出任何错误吗? - Eselfar