私はAndroidプロジェクトでRetrofit + RxJavaを使用しています。しかし、私のWebサービスには限界があります(1 reqest \ second)。だから、「ロード」ボタンを頻繁にクリックするとJSONがエラーで返されます。質問:成功していない限り、どのRxJava演算子を使用してクエリを再送信する必要がありますか?今私はちょうどonErrorメソッドが呼び出されているとそれはそれです。RxJavaで成功しない限り、リクエストを送信する方法は?
1
A
答えて
0
retryWhen演算子を使用して、特定のユースケースで1秒の遅延を与えます。ここで
はダン・ルー同じトピックに関する詳細な説明は、it'sは、あなたがしてretryWhenを使用して、実行時例外をスローすることができない場合は、あなたが好きなようにJSONがないかどうかを確認する必要があり、http://blog.danlew.net/2016/01/25/rxjavas-repeatwhen-and-retrywhen-explained/
0
ですもう一度jsonを取得するために再試行できます。次に、すべての試行が失敗した場合、演算子onErrorResumeNextで最後のエラーを取得し、必要に応じてデフォルトのjsonを返します。
int count = 0;
@Test
public void observableOnErrorResumeNext() {
Subscription subscription = Observable.just(new JsonObject())
.doOnNext(json -> if(json == BAD_JSON){ throw RuntimeException() })
.retryWhen(errors -> errors.doOnNext(o -> count++)
.flatMap(t -> count > 3 ? Observable.error(t) : Observable.just(null).delay(100, TimeUnit.MILLISECONDS)),
Schedulers.newThread())
.onErrorResumeNext(t -> {
System.out.println("Error after all retries:" + t.getCause());
return Observable.just("You can return here a default Json");
})
.subscribe(s -> System.out.println(s));
new TestSubscriber((Observer) subscription).awaitTerminalEvent(500, TimeUnit.MILLISECONDS);
}
ここで必要な場合はさらに例を見ることができます。 https://github.com/politrons/reactive
関連する問題
- 1. クッキーを生成してJmeterのリクエストで送信する方法
- 2. 同じページで送信した後に成功メッセージを取得する方法 - 新しいページではない
- 3. getJSONでフォームを送信しても成功しない
- 4. フォーム送信時にブートストラップローディングボタンの成功/エラーをバインドする方法
- 5. 繰り返しAjaxリクエストを送信しないようにする方法
- 6. リクエストを送信しない
- 7. ユーザーエージェントのヘッダーなしでリクエストを送信する方法
- 8. AngularJS - 最初のリクエストが成功した後にPOSTリクエストがデータを送信しない
- 9. Safariでajaxが成功した後にフォームを送信する方法
- 10. JMeterで連続したリクエストを送信する方法は?
- 11. JQuery AJAXの成功メッセージですが、リクエストは送信されません
- 12. SAMLリクエストの送信方法
- 13. Retrofit、RxJavaが最初に成功した場合にリクエストをします
- 14. observableを使用してRxJavaを使用してサービスクラスに複数のリクエストを送信する方法Spring Mvc
- 15. djangoでjsonリクエストを送受信する正しい方法は何ですか
- 16. djangoジェネリックビューを使用すると成功メッセージを送信する方法
- 17. フォームを送信しないボタンを作成する方法html
- 18. FineUploader Azureへのカスタムフォームデータの送信方法成功のエンドポイント?
- 19. HeadtyリクエストでJettyがコンテンツ長ヘッダーを送信しないようにする方法はありますか?
- 20. javascript - 成功したajaxリクエスト/返信を追跡する
- 21. HTTPリクエストを保存して再送信する方法はありますか?
- 22. PUTリクエストを送信するには、このリンクを作成する方法?
- 23. python robo framework - httpリクエストでフォームデータを送信する方法は?
- 24. レスポンス/リクエストでアレイを送信する方法は?
- 25. Indy 9でDELETEリクエストを送信する方法は?
- 26. 本文リクエストでWeb APIにパラメータを送信する方法は?
- 27. HttpURLConnectionでPUT、DELETE HTTPリクエストを送信する方法は?
- 28. Tornado:同じクラスに異なるリクエストを送信する方法
- 29. DragulaがAJAXリクエストを送信しない
- 30. Extjs 5.0.1 JSON POSTリクエストを適切な方法で送信する方法
「再試行」を試しましたか? -http://reactivex.io/documentation/operators/retry.html - 私は確信していませんが、実際にリクエストを再作成しないと思いますが、既にプロジェクトがあるので試してみることができると思いました – Fred
'throttleFirst'?最初のイベントを発行し、その間に次のイベントをスキップします(ここでは1秒) – dwursteisen