我正在使用rxjava&Room尝试更新db中的行列表。 卡在事件不断触发的循环中
Dao
@Query("SELECT * FROM movies")
Flowable<List<Movie>> getMovies();
@Update
int updateMovie(Movie movie);
UpdateClass -帮助类正在像这样更新Db
// Trying to get all existing movies and update one value in all of them.
@WorkerThread
Flowable<Integer> updateMovies(Helper help) {
return movieDao.getMovies().flatMapIterable(movies -> movies)
.flatMap(movie -> {
LogUtils.debug("movieusecase", "movieid" + movie.getMovieId());
movie.updateRating(help.getUpdatedVal(movie));
return Flowable.just(movie);
}).map(movie -> {
return movieDao.updateMovie(movie);
});
}
一旦包含updateMovie
调用,我就会陷入无限循环,重复事件不断从房间db传来。
演示者类-调用更新类以更新数据库中的内容。在活动onCreate
updateClass.updateMovies()
.observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(movie -> {
// update stuff
}, throwable -> {
LogUtils.error(TAG, throwable.getMessage());
});
在此先感谢您的帮助。
答案 0 :(得分:0)
听起来像Single
而不是Flowable
的工作。
区别在于Single
只会在数据库中的当前电影列表中触发一次,不会像Flowable
那样不断发出更改。
Single<List<Movie>> getMovies();
或者如果您出于某种原因希望您的方法返回Flowable
,则也可以使用Flowable.firstOrError()
,它将Flowable
转换为带有{{3 }}。
Single
尽管为了意图清楚起见,我还是选择第一个选项。