Я пытаюсь выполнить вызов API с помощью модернизации и получить ответ от вызова. Я использую Single of Rx java, чтобы получить ответ. Что мне нужно сделать, так это повторить попытку вызова. Я просмотрел множество примеров, но, похоже, ни один из них не помог. (Также из-за моих ограниченных знаний о RX java и Kotlin).
Ниже приведена функция, которая выполняет вызов, и retryWhen
функция, которую я написал
fun testFetch(): Single<ResponseBody>{
return retrofitService.getCTLNetworkService().test().retryWhen {
val ato = AtomicInteger()
it.takeWhile {
ato.incrementAndGet() < 4
}.flatMap {
Flowable.timer(1, TimeUnit.MINUTES)
}
}
}
Это именно то, чего я хочу достичь
Single.timer(1, TimeUnit.SECONDS)
* .doOnSubscribe(s -> System.out.println("subscribing"))
* .map(v -> { throw new RuntimeException(); })
* .retryWhen(errors -> {
* AtomicInteger counter = new AtomicInteger();
* return errors
* .takeWhile(e -> counter.getAndIncrement() != 3)
* .flatMap(e -> {
* System.out.println("delay retry by " + counter.get() + " second(s)");
* return Flowable.timer(counter.get(), TimeUnit.SECONDS);
* });
* })
* .blockingGet();
Ниже приведена ошибка при компиляции кода
Type mismatch: inferred type is (Throwable!) -> Flowable<Long!>! but ((Throwable!) -> Publisher!)! was expected
ПРИМЕЧАНИЕ: изменен метод для простоты. Даже простой signle<ResponseBody>
вызов без какого-либо картографа и модели не удается