RecyclerView不会使用数据库中的数据更新UI

时间:2018-06-20 21:14:09

标签: android android-recyclerview android-room

我的数据库正在填充中,并用于创建viewModel。调试时似乎一切都按预期工作,但是当我运行代码时,我得到了一个emoty recyclerView

我的方法从数据库中获取MovieItems

 public Single<List<MovieListItem>> getFavoriteslist(Context context) {
    return Single.fromCallable(() -> getFavoritesFromDb(context))
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread());
}

 private List<MovieListItem> getFavoritesFromDb(Context context) {
    List<Movie> favoriteMovies = Database.getAppDatabase(context).movieDao().getAll();
    List<MovieListItem> favoriteList = new ArrayList<>();

    for(int i = 0; i < favoriteMovies.size(); i++) {
        MovieListItem favoriteListItem = new MovieListItem();
        Movie movieObject = favoriteMovies.get(i);

        favoriteListItem.setId(movieObject.getMovieId());
        favoriteListItem.setImageUrl(movieObject.getPosterPath());
        favoriteListItem.setTitle(movieObject.getMovieName());
        favoriteListItem.setVoteCount(movieObject.getVoteCount());
        favoriteListItem.setVoteAverage(movieObject.getVoteAverage());
        favoriteListItem.setVotePopularity(movieObject.getPopularity());
        favoriteListItem.setOverview(movieObject.getOverview());
        favoriteListItem.setReleaseDate(movieObject.getReleaseDate());
        favoriteList.add(favoriteListItem);
    }
    return favoriteList;
}

这里是将回收者视图中的旧数据替换为新数据的方法:

         if (id == R.id.action_favorite) {
        mCurrentSort = SORT_FAVORITE;
        mCompositDisposable.clear();
        mCompositDisposable.add(movieGridViewModel.getFavoriteslist(getContext()).subscribe(movieListItems ->
        {
            if (mMovieGridAdapter != null) {
                mMovieGridAdapter.clearAllMovieData();
                mMovieGridAdapter.loadFavoriteMovies(movieListItems);
                mMovieGridAdapter.notifyDataSetChanged();
            } else {
                mMovieGridAdapter = new MovieGridAdapter(getActivity(), movieListItems);
                mMovieGridAdapter.setClickListener(this);
                mRecyclerView.setAdapter(mMovieGridAdapter);
                mMovieGridAdapter.notifyDataSetChanged();
            }

        }, throwable -> {
            Toast.makeText(getContext(), "no internet connection", Toast.LENGTH_LONG).show();

        }));
    }

似乎适配器具有数据,但是由于某种原因未更新UI。

0 个答案:

没有答案