9

ネットワーク エラーが原因で失敗する可能性のある Retrofit を使用した API 呼び出しがあります。失敗した場合は、再試行ボタン付きのエラー メッセージが表示されます。ユーザーが再試行ボタンを押すと、最新の Observable を再試行する必要があります。

可能な解決策:

  1. 再試行: オブザーバブルをサブスクライブする前に再試行を使用する必要があり、エラーが発生した場合はすぐに再サブスクライブします。これは望ましくありません。ユーザーが再試行ボタンを押した場合にのみ再サブスクライブする必要があります。

  2. RetryWhen: Observable エラーを発行するまでアイテムを発行し続けます。その後、停止します。ここでも同じ問題があります。ユーザーが決定しない限り、再試行プロセスを開始する必要はありません。

  3. 同じ Observable への再サブスクライブ: このソリューションは、Observable アイテムの発行を開始します。これの問題は、キャッシュ オペレーターを使用しているため、1 つの Observable が失敗した場合、失敗したアイテムがキャッシュされ、再度サブスクライブすると、また同じエラー。

一緒に行く他の解決策はありますか?

4

1 に答える 1

8

このパラメーター - Func1 - は、再試行がいつ発生するかを示す Observable を返します。例えば ​​:

PublishSubject<Object> retryButtonClicked = PublishSubject.create();

Observable
        .error(new RuntimeException())
        .doOnError(throwable -> System.out.println("error"))
        .retryWhen(observable -> observable.zipWith(retryButtonClicked, (o, o2) -> o))
        .subscribe();

retryButtonClicked.onNext(new Object());

retryButtonClicked がイベントを発行するたびに、Observable が再試行されます

ここにも例があります - https://gist.github.com/benjchristensen/3363d420607f03307dd0

于 2015-06-15T08:14:15.887 に答える