使用 Room 进行动态排序

2023-12-29

我想使用 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();

But, 在运行时,我看到返回的数据是按已设置的主键(即 id)排序的而不是根据我在上面的声明中构建的这种类型。

如何使用该语句返回按所选排序类型排序的结果。

使用的 Dao 方法是:-

@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"))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Room 进行动态排序 的相关文章

随机推荐