мой код для ошибки не совсем так, но просто чтобы дать вам представление о том, как пройти в лямбду. Я уверен, что вы можете передать в свою функцию. в этом случае лямбда была самой попыткой повторения.
ню API, используя Retrofit 2 и RxJava2. В случае сбоя вызова, в некоторых случаях (например, без подключения к Интернету), я хочу отобразить диалоговое окно с ошибкой для пользователя и позволить ему повторить попытку.
Поскольку я использую 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");
});
}