首页 > 解决方案 > 如何使用改造和 mvvm 加载多个页面

问题描述

我在我的应用程序中使用 Retrofit、RxJava 和 MVVM 模式。

我有 API 可以检索我的电影列表。

在 API 请求中,我必须说明我要加载哪个页面(API 为每个请求检索我 1 个页面(20 个项目))。

在应用程序开始时,我想加载 3 个页面。

我该怎么做?

这就是我现在所拥有的:

存储库:

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;
    }

视图模型:

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);
    }

和 MainActivity:

mMoviesViewModel.getMoviesResultMutableLiveData(getString(R.string.sort_by_popularity), 1, null, null)
                .observe(this, new Observer<List<MoviesResult>>() {
                    @Override
                    public void onChanged(List<MoviesResult> moviesResults) {
                        Log.d(TAG, "onChanged: "+moviesResults.size());
                    }
                });

当“i”等于我要加载的页面时,我尝试在主要活动中创建一个 for 循环,然后在 getMovies 方法中将 i 设置为页面 - 但它对我不起作用。

for (int i = 0; i < 3; i++) {
            mMoviesViewModel.getMoviesResultMutableLiveData(getString(R.string.sort_by_popularity), i, null, null)
                    .observe(this, new Observer<List<MoviesResult>>() {
                        @Override
                        public void onChanged(List<MoviesResult> moviesResults) {
                            Log.d(TAG, "onChanged: "+moviesResults.size());
                        }
                    });
        }

在这种情况下,我只收到 1 页。

标签: javaandroidmvvmretrofit2rx-java

解决方案


链接添加分页而不使用分页库链接


推荐阅读