java - 如何使用改造和 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 页。
解决方案
链接添加分页而不使用分页库链接
推荐阅读
- c# - 在属性中定义 LAMBDA 查询,以便可以重复使用
- python - 以编程方式阻止特定文件(.txt 扩展名)的打印请求?
- reactjs - 无法在未安装的组件上调用 setState
- android - 一种包装 LinearLayout 的方法
- python - 随机删除 numpy 数组中 30% 的值
- javascript - 使用 Promise 和数组链接 Ajax 调用时获取传递给 Ajax 的请求参数
- javascript - 如何重置对象的变量?
- python - Numpy数组:高效赋值
- c# - 尝试并行运行测试时,如何正确传递 webdriver?
- sql - 获取表 sql 上每个字段的名称