У меня есть модель просмотра для фрагмента с функцией поиска. Я использовал Coroutines для выборки из API, а затем установил значение MediatorLiveData с результатом, хотя список объектов отражается в моем RecyclerView. Когда я пытаюсь получить доступ к значению MediatorLiveData с помощью liveData.value
, он возвращает ноль. Я пробовал отлаживать его, но, несмотря на отображение списка объектов, я не могу получить доступ к значению живых данных в ViewModel
ViewModel
class SearchViewModel @Inject constructor(private val mutwitsRepo: MutwitsRepo) : BaseViewModel() {
val query = MutableLiveData<String>()
private val _isLoading = MutableLiveData<Boolean>()
val isLoading: LiveData<Boolean> = _isLoading
private val _users = MediatorLiveData<List<User>>()
val users: LiveData<List<User>> = _users
private var queryTextChangedJob: Job? = null
init {
_users.addSource(query) { queryStr ->
if (queryStr.isNullOrEmpty()) _users.value = emptyList()
else searchUsers(queryStr)
}
}
fun searchUsers(query: String) {
_isLoading.value = true
queryTextChangedJob?.cancel()
queryTextChangedJob = viewModelScope.launch {
delay(300)
_users.value = mutwitsRepo.searchUsers(query)
_isLoading.value = false
}
}
fun selectUser(user: User) {
val temp = _users.value
temp?.find { it.id_str == user.id_str }?.toggleSelected()
_users.value = temp
}
override fun onCleared() {
super.onCleared()
queryTextChangedJob?.cancel()
}
}
Функция репозитория
suspend fun searchUsers(query: String): List<User> = withContext(Dispatchers.IO) {
return@withContext twitterService.searchUsers(query)
Мои коды показаны выше, я застрял в течение нескольких дней, и любая помощь будет очень признательна! }
Activity/Fragment
код, откуда вы получаете доступ кLiveData
- person Md. Asaduzzaman   schedule 30.12.2019users
liveata, и я могу заполнить recyclerview, я просто не знаю, почему я не могу получить доступ к значениюusers
или_users
- person Ralph   schedule 06.01.2020