Вернуть LiveData наблюдать за результатом как класс Request of Authenticator - PullRequest
0 голосов
/ 12 февраля 2019

Я работаю над классом Authenticator, который сохраняет и загружает токен обновления и токен в / из базы данных.

Мой Dao возвращает LiveData>, и мне нужно запросить его, чтобы найти пользователя с определенным именем пользователя и обновить как токен, так и обновить токен с помощью команды обновления Dao.

class TokenAuthenticator(private val userName :String, private val activity : MainActivity , private val service : AuthenticateService) : Authenticator {

lateinit var  userForSave: User
private lateinit var userViewModel: UserViewModel
override fun authenticate(route: Route?, response: Response): Request? {
    userViewModel = ViewModelProviders.of(activity).get(UserViewModel::class.java)
    if(responseCount(response) >= 2) {
        return null
    }
     userViewModel.allUsers.observe(activity, Observer { result ->
        userForSave = result!!.find{ x:User -> x.userName == userName}!!
    })
    val tokenDto: TokenDto = TokenDto(token = userForSave!!.token, refreshToken = userForSave!!.refreshToken)
    val refreshTokenCall = service.refreshToken(tokenDto)
    val refreshResponse = refreshTokenCall.execute()
    if(refreshResponse.isSuccessful) {
        userForSave!!.token = refreshResponse!!.body()!!.token
        userForSave!!.refreshToken = refreshResponse!!.body()!!.refreshToken
        userViewModel.update(userForSave!!)
        return response.request()
            .newBuilder()
            .header("Authorization", "Bearer ${userForSave!!.token}")
            .build()
    }
    return null
}
private fun responseCount(response: Response) : Int {
    var count = 1
    var res = response.priorResponse()
    while(res != null) {
        count++
        res = res.priorResponse()
    }
    return count
}
}

Мне нужно найти найденного пользователя, прежде чем звонить на новый токен обновления.Другими словами, мне нужен метод, такой как «Then ()», чтобы убедиться, что userForSave имеет данные.Кроме того, существует ли какой-либо подход к получению данных без использования ViewModel?Просто с помощью Dao

...