Как реализовать этот лог c в классе viewMode? - PullRequest
0 голосов
/ 09 июля 2020

Я новичок в 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;
}
...