Я новичок в MVVM, поэтому мне нужна помощь с реализацией этого метода в моем классе ViewModel.
Вот logi c (для l oop), которые вызывают вызовы api с разные значения (популярные фильмы, фильмы с самым высоким рейтингом и т. д. c ...).
Как видите, у меня есть список массивов со значениями sort_by (запрос, который требуется в api для получения отсортированного списка). Но, как мы знаем, делать логин в активности и фрагменте - плохая практика.
Вот основной метод действия.
private void getMoviesList() {
ArrayList<Integer> sortBy = new ArrayList<>();
sortBy.add(R.string.sort_by_popularity);
sortBy.add(R.string.sort_by_top_rated);
for (int i = 0; i < sortBy.size(); i++) {
mMoviesViewModel = new ViewModelProvider.AndroidViewModelFactory(getActivity().getApplication()).create(MoviesViewModel.class);
int finalI = i;
mMoviesViewModel.getMoviesResultMutableLiveData(sortBy.get(i).toString(), 1, null, null)
.observe(this, new Observer<List<MoviesResult>>() {
@Override
public void onChanged(List<MoviesResult> moviesResults) {
if (moviesResults != null) {
addRecyclerView((ArrayList<MoviesResult>) moviesResults, sortBy.get(finalI));
}
}
});
}
}
И ViewModel:
public MutableLiveData<List<MoviesResult>> getMoviesResultMutableLiveData(String sort_by, int page, String with_genres, String with_cast) {
return mMoviesRepository.getMoviesResultsMutableLiveData(sort_by, page, with_genres, with_cast);
}
AndRepository:
public MutableLiveData<List<MoviesResult>> getMoviesResultsMutableLiveData(String sort_by, int page, String with_genres, String with_cast) {
MoviesService moviesService = RetrofitInstance.getMoviesService();
mDisposable = moviesService.getMovies(
mApplication.getResources().getString(R.string.api_key),
sort_by,
UserSettings.getInstance().includeAdults(),
true, page, with_genres, with_cast)
.retryWhen(throwable ->
throwable.delay(5, TimeUnit.SECONDS))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<MoviesResponse>() {
@Override
public void accept(MoviesResponse moviesResponse) throws Throwable {
mMoviesResultsMutableLiveData.setValue(moviesResponse.getMoviesResults());
mDisposable.dispose();
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Throwable {
CustomToast customToast = new CustomToast(mApplication.getApplicationContext());
customToast.makeCustomText(throwable.getMessage());
mDisposable.dispose();
}
});
return mMoviesResultsMutableLiveData;
}