我试图在重新启动时实现autoLogin函数,并且需要在自动登录完成后更改上一个observable的参数。
所以我创建了一个函数
class TestClass(): Function<Flowable<out Throwable>, Flowable<*>> {
override fun apply(flowable: Flowable<out Throwable>): Flowable<*> {
return flowable
.flatMap {
if (it is HttpException && it.code() == 401 ) {
Timber.d("apply: Doing AutoLogin.")
dataSource
.login(document, password)
.map {
//Auto login done, update user
}
.doOnError({
// login failed
})
.toFlowable()
} else {
Flowable.error(it)
}
}
}
}
并以这种方式应用:
dataSource.apiCall(user)
.retryWhen(TestClass())
.subscribe()
也是这样尝试的:
Single.defer {
dataSource.apiCall(user)
.retryWhen(TestClass())
}
.subscribe()
}
问题是,在重试请求后登录后,用户不会更新。
我做错了什么?