мой код для ошибки не совсем так, но просто чтобы дать вам представление о том, как пройти в лямбду. Я уверен, что вы можете передать в свою функцию. в этом случае лямбда была самой попыткой повторения.

ню 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");
                    });
}

Ответы на вопрос(2)

Ваш ответ на вопрос