Viewmodel не меняет Livedata после первого раза - PullRequest
0 голосов
/ 15 марта 2020

Я получаю данные из API Google Книг, используя компоненты Архитектуры. Это простое приложение для авторов книг поиска. Проблема в том, что когда я сначала создаю ViewModel, он наблюдает за данными, но когда я изменяю запрос для поиска по автору другой книги, он ничего не показывает. Я пытался очистить ViewModel перед извлечением других данных, он работает, как я хотел, но я думаю, что должен быть лучший способ для этого, и если нет, дайте мне знать :)

Вот код ViewModel:

class BookViewModel extends ViewModel {
private static BookRepository repository;
BookViewModel(String q) {
    repository = new BookRepository(q);
}



LiveData<String> getInfo(){
    return repository.getInfo();
}

LiveData<String> getTitle(){
    return repository.getTitle();
}

}

А вот функция, которую я вызываю в Activity для получения данных:

   public void searchBooks(View view) {
    // Get the search string from the input field.
    final String queryString = mBookInput.getText().toString();

        if (queryString.length() != 0) {
            getViewModelStore().clear();
            BookViewModelFactory = new BookViewModelFactory(queryString);
            BookViewModel viewModel;


            viewModel=
               new ViewModelProvider(this,factory).get(BookViewModel.class);

            viewModel.getInfo().observe(this, new Observer<String>() {
                @Override
                public void onChanged(String s) {
                    mAuthorText.setText(s);
                }
            });

            viewModel.getTitle().observe(this, new Observer<String>() {
                @Override
                public void onChanged(String s) {
                    mTitleText.setText(s);
                }
            });


            mAuthorText.setText("");
            mTitleText.setText(R.string.loading);
        } else {
            mAuthorText.setText("");
            mTitleText.setText(R.string.no_search_term);
        }
    }else {
        mAuthorText.setText("");
        mTitleText.setText(R.string.no_network);
    }
...