Я получаю данные из 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);
}