android - 使用房间的动态订单
问题描述
我想使用房间创建一个动态查询,以便在一种情况下查询返回特定的订单类型,并且在运行时如果订单类型发生更改,则创建一个新查询并根据此类型排序返回数据。
我正在使用 Room 返回一个 DataSource.Factory 对象。我正在使用以下语句来处理我的查询:-
if(getSortOrderType().equals(context.getString(R.string.sortByPopular))) {
dbSortType = "popularity";
} else {
dbSortType = "vote_average";
}
movieLiveData =
new LivePagedListBuilder<>(MovieDatabase
.getMovieDbInstance(context)
.getMovieDao().getAllMovies(new
SimpleSQLiteQuery("SELECT * FROM main_movie ORDER BY ? DESC",
new Object[]{dbSortType})), config)
.setBoundaryCallback(movieModelBoundaryCallback)
.build();
但是,在运行时,我看到返回的数据是按已设置的主键(即 id)排序的,而不是根据我在上述语句中构建的这种类型。
如何使用该语句返回按所选排序类型排序的结果。
使用的道法是:-
@RawQuery(observedEntities = MovieModel.class)
DataSource.Factory<Integer,MovieModel> getAllMovies(SupportSQLiteQuery query);
解决方案
好的,我找到了一个简单的答案。
我刚刚替换了声明-
new SimpleSQLiteQuery("SELECT * FROM main_movie ORDER BY ? DESC", new Object[]{dbSortType})
对此:-
new SimpleSQLiteQuery("SELECT * FROM main_movie ORDER BY "+ dbSortType + " DESC"))
推荐阅读
- linphone - 与 yocto 集成时 linphone mediastreamer2 fetcher 失败
- typescript - 笑话:测试完成后无法登录
- javascript - 在 html 页面中加载 html 元素
- flutter - 使用 Flutter BLoc 登录 Google 失败
- uwp - 如何获取主 AppWindow 的实例?
- iar - STEVAL-IDB008V1 的测试应用程序
- android - 在进行发布构建时出现错误:程序类型已存在:okhttp3.Call$Factory
- sql - 复制 SQL 内连接中的值,
- r-mice - 如何将 mimira 对象(Cox 回归模型,来自多重插补和倾向得分匹配 (MatchThem pkg))转换为森林图
- python - 当为多个输入调用 model.fit 函数时,会引发基数问题