- 使用Retrofit的API类
class interface TestApi {
@GET("/path/abc/xyz")
fun get(): Single
}
- UseCase类
fun getResult(): Single {
return testApi.get()
.map{ response ->
val type = response.type
when(type){
null -> throw Exception()
else -> response
}
}
.retryWhen{ throwableHandler ->
throwableHandler.flatMap {
when(it) {
is Exception() -> Flowable.error(it)
else -> Flowable.timer(3,TimeUnit.SECONDS)
}
}
}
.timeout(60, TimeUnit.SECONDS)
}
- MainClass.kt
usecase.getResult()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(onError = {Log.d(TAG,"Error")},
onSuccess = {Log.d(TAG,"Next")})
- 应用运行时:
如果api返回NULL,则会调用retryWhen(),然后再次调用api . 事件未达到超时且api返回非NUL结果 - > onSuccess被调用 . 这是正确处理rxJava中的retryWhen()运算符 .
My Problem:
如果我在MainClass.kt中编写一些测试方法(假装API Retrofit),如下所示:
private fun testPretend(): Single<Animal> {
return Single.just(Animal)
}
MainClass.kt看起来像:
testPretend()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(onError = {Log.d(TAG,"Error")},
onSuccess = {Log.d(TAG,"Next")})
因此,事件重试在调用时,不再调用testPretend()方法 . 这里有什么问题?
而testPrerend()和Retrofit API的单一返回有什么区别?
1 回答
方法
testPretend()
不会再次调用,因为它返回的observable是重新订阅的内容 . 如果您希望在重新订阅时再次调用该方法,则需要执行以下操作:这将在重新订阅时调用
testPretend()
.