Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RetryWhen在与Single一起使用时出现了一些问题_Android_Kotlin_Rx Java_Rx Java2 - Fatal编程技术网

Android RetryWhen在与Single一起使用时出现了一些问题

Android RetryWhen在与Single一起使用时出现了一些问题,android,kotlin,rx-java,rx-java2,Android,Kotlin,Rx Java,Rx Java2,我正在尝试使用改装来点击一个API调用,并从调用中接收响应。我正在使用Rxjava的单个函数来获得响应。我需要做的是,如果呼叫失败,请重试。 我看过很多例子,但似乎没有一个能帮上忙(也因为我对RXjava和Kotlin的知识有限) 下面是执行调用的函数和我编写的retryWhen函数 fun testFetch(): Single<ResponseBody>{ return retrofitService.getCTLNetworkService().test().retry

我正在尝试使用改装来点击一个API调用,并从调用中接收响应。我正在使用Rxjava的单个函数来获得响应。我需要做的是,如果呼叫失败,请重试。 我看过很多例子,但似乎没有一个能帮上忙(也因为我对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)
        }
    }
}
下面是我编译代码时的错误

Type mismatch: inferred type is (Throwable!) -> Flowable<Long!>! but ((Throwable!) -> Publisher!)! was expected
类型不匹配:推断的类型是(可丢弃的!)->可流动的!但是((可丢弃!)->出版商!)!预料之中
注意:为了简单起见更改了方法。即使是一个没有任何映射器和模型的简单的
single
调用也会失败

请检查此项

下面是如何使用扩展的示例

// 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") }
//导入扩展文件
导入com.vk.extension.retrywhen错误
//范例
Observable.fromIterable(Arrays.asList(1,2,3)).retryWhen{it.retryWhenError()}
.subscribe{integers:Int->Log.d(标记“item$integers”)}
检查此项

下面是如何使用扩展的示例

// 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") }
//导入扩展文件
导入com.vk.extension.retrywhen错误
//范例
Observable.fromIterable(Arrays.asList(1,2,3)).retryWhen{it.retryWhenError()}
.subscribe{integers:Int->Log.d(标记“item$integers”)}

请编辑您的帖子,并添加映射器/模型类。我尝试使用您的代码重新创建一个示例,当它只使用Observable时,它会编译得更精细。对于single,无法重新订阅,因此无法使用single。请编辑您的帖子并添加映射器/模型类。我尝试使用您的代码重新创建一个示例,当它只使用Observable时,它会编译得更精细。对于单曲,没有办法重新订阅,所以它对单曲不起作用。我不同意。如果是这样的话,那么为什么Rxjava的单个类在它的retryWhen方法中给出了一个示例我不同意。如果是这样,那么为什么Rxjava的单个类在它的retryWhen方法中给出了一个示例