Я пытаюсь реализовать функцию autoLogin с повтором, когда и нужно изменить параметры предыдущей наблюдаемой после автоматического входа в систему.
Итак, я создал функцию
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()
}
Проблема в том, что после входа в систему при повторной попытке запроса пользователь не обновляется.
Что я делаю не так?