Я занимаюсь разработкой архитектуры для приложения для Android и проверяю документ
https://developer.android.com/jetpack/docs/guide
Но, пытаясь протестировать код руководства по архитектуре Android, это совсем не правильно, потому что веб-сервис будет асинхронным, и обратное предложение будет вызываться до того, как веб-сервис закончится.
class UserRepository {
private val webservice: Webservice = TODO()
fun getUser(userId: String): LiveData<User> {
// This isn't an optimal implementation. We'll fix it later.
val data = MutableLiveData<User>()
webservice.getUser(userId).enqueue(object : Callback<User> {
override fun onResponse(call: Call<User>, response: Response<User>) {
data.value = response.body()
}
// Error case is left out for brevity.
override fun onFailure(call: Call<User>, t: Throwable) {
TODO()
}
})
return data
}
}
class UserProfileViewModel @Inject constructor(
savedStateHandle: SavedStateHandle,
userRepository: UserRepository
) : ViewModel() {
val userId : String = savedStateHandle["uid"] ?:
throw IllegalArgumentException("missing user id")
val user : LiveData<User> = userRepository.getUser(userId)
}
В моей архитектуре у нас есть дополнительный слой "хранилище"
Как лучше всего сообщить результат работы асинхронного веб-сервиса?
Спасибо