Значение LiveData равно нулю после установки в viewModelScope

У меня есть модель просмотра для фрагмента с функцией поиска. Я использовал 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)

Мои коды показаны выше, я застрял в течение нескольких дней, и любая помощь будет очень признательна! }


comment
Вы пробовали установить значение с помощью 'post' вместо задания с помощью значения?   -  person Dominik Wuttke    schedule 30.12.2019
comment
Да, такой же результат. Я думаю, что ценность в порядке, так как я нахожусь в режиме просмотра   -  person Ralph    schedule 30.12.2019
comment
Добавьте свой Activity/Fragment код, откуда вы получаете доступ к LiveData   -  person Md. Asaduzzaman    schedule 30.12.2019
comment
@ Md.Asaduzzaman, извините за поздний ответ, у меня есть только 1 наблюдатель во фрагменте для заполнения recyclerview с users liveata, и я могу заполнить recyclerview, я просто не знаю, почему я не могу получить доступ к значению users или _users   -  person Ralph    schedule 06.01.2020


Ответы (1)


По-видимому, эта проблема была вызвана инъекцией ViewModel в мой адаптер. Я вставил свою модель просмотра в свой адаптер с помощью кинжала и установил кнопку onClickListener с функцией selectUser(). Я извлек настройку clickListener в свой фрагмент, и это сработало.

person Ralph    schedule 07.01.2020