android - RetryWhen与Single一起使用时出现一些问题

标签 android kotlin rx-java rx-java2

我正在尝试使用改型打API调用并接收该调用的响应。我正在使用Rxjava的Single获取响应。我需要做的是,如果 call 失败,请重试。
我看了很多例子,但似乎没有什么帮助(也是因为我对RXjava和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 -&gt; System.out.println("subscribing"))
 *     .map(v -&gt; { throw new RuntimeException(); })
 *     .retryWhen(errors -&gt; {
 *         AtomicInteger counter = new AtomicInteger();
 *         return errors
 *                   .takeWhile(e -&gt; counter.getAndIncrement() != 3)
 *                   .flatMap(e -&gt; {
 *                       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>调用,也会使失败

最佳答案

检查这个Gist Link

这是示例如何使用扩展

// import extension file 
import com.vk.extension.retryWhenError
 // example
 Observable.fromIterable<Int>(Arrays.asList(1, 2, 3)).retryWhen { it.retryWhenError()}
        .subscribe { integers: Int -> Log.d(TAG, "item $integers") }

关于android - RetryWhen与Single一起使用时出现一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59856216/

相关文章:

android - 如何在微调器中添加提示

android - 在单个 APK 中定位多个 API

java - 咖啡因:当AsyncLoader无法刷新时,请使用过时的值

java - 如何在 Java 类上的 Kotlin 中声明扩展静态函数?

kotlin - 在 kotlin 中如何将函数引用放入数组中

java - 如何在 Java 中消除改造 react 请求?

java - 从 WiFi 连接切换到 3g 会导致连接挂起?

java - WebView 只打开部分 URL 而不是全部

android - 空闲资源繁忙时测试 UI

retrofit - 如何使用改造和 rxjava 取消任务