У меня есть простое приложение, которое показывает список фильмов. Когда пользователь нажимает кнопку, он должен обновить список, что означает, что нужно снова перейти на Retrofit и получить новый список.
Проблема в том, что это обновление не работает. Он выбирает список только один раз, когда я открываю приложение.
public class MoviesViewModel extends AndroidViewModel {
private MutableLiveData<Resource<List<Movie>>> mLastdMovieListObservable;
private Repository mRepository;
public MoviesViewModel(Application application) {
super(application);
mRepository = new Repository();
}
public LiveData<Resource<List<Movie>>> getMovieListLiveData() {
if (mLastdMovieListObservable == null) {
mLastdMovieListObservable = mRepository.getMovieList();
}
return mLastdMovieListObservable;
}
}
и хранилище:
public MutableLiveData<Resource<List<Movie>>> getMovieList() {
final MutableLiveData<Resource<List<Movie>>> data = new MutableLiveData<>();
data.setValue(Resource.loading(null));
mInterface.getMovies(.....).enqueue(new Callback<MovieListResponse>() {
@Override
public void onResponse(Call<MovieListResponse> call, Response<MovieListResponse> response) {
if (response.isSuccessful()) {
data.postValue(Resource.success(response.body().getResult()));
} else {
data.postValue(Resource.error(response.message(), null));
}
}
@Override
public void onFailure(Call<MovieListResponse> call, Throwable t) {
data.postValue(Resource.error(t.getMessage(), null));
}
});
return data;
}
Тогда во фрагменте это просто:
mMoviesViewModel.getMovieListLiveData().observe(this, moviesResource -> {
if (moviesResource.status == Status.SUCCESS) {
.....
.....
затем часть нажатия кнопки, когда мне нужно снова получить список, я не уверен, как это реализовать.
Все, что я пробовал, не сработало. Репозиторий сразу же вернул данные как нулевые.