Как решить проблему с потоком 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
        )
    }

0 ответов

Другие вопросы по тегам