Я работаю над классом 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