Android LiveData Observer не активен после первого обновления

Я пытаюсь выполнить базовую реализацию Live Data Data Component с Kotlin следующим образом:

class MarketFragment : LifecycleFragment(){ ...... override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) viewModel=ViewModelProviders.of(this).get(MarketViewModel::class.java) viewModel.book?.observe(this, Observer { book-> //updateUI }) .... 

Мой класс ViewModel создается следующим образом:

 class MarketViewModel : ViewModel() { var book: MutableLiveData<Book>? =MutableLiveData() var repository: Repository?= Repository() init { update("parameter") } fun update(s: String) { book=repository?.getBook(s) } } 

И мой репозиторий:

 fun getBook(bookSymbol:String):MutableLiveData<Book> { val book=MutableLiveData<Book>() ...... call . enqueue (object : Callback<Book> { override fun onResponse(call: Call<Book>?, response: Response<Book>?) { book.value=response?.body() } ..... }) return book } 

}

И все это отлично работает, и пользовательский интерфейс обновляется по мере необходимости, но только в первый раз. Если я попытаюсь выполнить ручные вызовы, чтобы обновить viewModel от действия пользовательского интерфейса, то запрос на доработку по-прежнему работает так, как ожидалось, но новые данные не отправляются Наблюдателю во Фрагменте:

 //this doesn't work: viewModel.update("string") //This returns false: viewModel.book.hasActiveObservers() 

Ожидается ли, что ожидаемое поведение наблюдателя станет неактивным после первого триггера?

Solutions Collecting From Web of "Android LiveData Observer не активен после первого обновления"

Вы создаете новый экземпляр MutableLiveData каждый раз, когда вы вызываете getBooks

Следовательно, ваш наблюдатель больше не наблюдает за правильным LiveData .

Чтобы решить эту проблему, ваш ViewModel должен хранить только один экземпляр MutableLiveData и публиковать обновления, используя функцию postValue .

Затем репозиторий может использовать RxJava (Flowable) для выполнения запроса в фоновом потоке и возврата Observable<Book> (или Single<Book> )