【发布时间】:2018-07-15 11:35:24
【问题描述】:
我想使用 room 创建一个动态查询,以便在一种情况下查询返回特定的订单类型,并且在运行时如果订单类型发生更改,则会创建一个新查询并根据此类型排序返回数据。
我正在使用 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);
【问题讨论】:
-
我怀疑
?不能在ORDER BY子句中使用。
标签: android android-sqlite android-room