Как решить проблему с потоком doAsynk из библиотеки Anko или использовать любой другой метод
У меня проблема, когда мне нужно найти данные из API (станции), выбрать один из результатов (идентификатор станции) и передать его другому API-вызову (для получения подробной информации о станции), и только тогда я должен вставить значения (в базе данных станции), чтобы иметь всю полную информацию. Это мои методы, которые делают фукцию из двух apis и вставляют в базу данных комнаты. Я размещаю комментарии в хитрых местах.
Это мой первый метод
@SuppressLint("CheckResult")
fun fetchAndUpdateDb(onSuccess: (User) -> Unit, onError: (Exception) -> Unit) {
val login = accountUtils.getCurrentAccount()?.name
?: return onError(Exception("No user Account")).also { cleanUserDatabase() }
val password = accountUtils.getPassword()
if (login.contains('@'))
apiManager.loginAndFecthUserData(login, password, { update(it, onSuccess, onError) }, onError)
}
Это мой второй метод:
fun update(userInfo: UserInfo, onSuccess: (User) -> Unit, onError: (Exception) -> Unit) {
cardsRepository.updateCards(userInfo.AssociatedCards.AssociatedCards.distinctBy { it.number },
{
//To cut code, I receive all the user info here
// I am picking the api user data response and pick the favouriteStation
doAsync {
loadStations(userInfo.generalInfo?.favouriteStation?.toInt()!!)
}
//only after the stations being load I should do this(PURPOSE OF THIS QUESTION)
val entity = UserEntity(
userInfo.generalInfo!!.clientNumber,
userInfo.generalInfo.firstName,
userInfo.generalInfo.lastName,
userInfo.generalInfo.favouriteStation,
userInfo.totalPoints.total,
userInfo.generalInfo.accountState,
stationName
)
userDao.insert(entity)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
onSuccess(entity.toDomain())
},
{ onError(Exception(it.message)) }
)
}, onError
)
}