Android的SimpleCursorAdapter使用DISTINCT进行查询

Sil*_*owe 11 sqlite android distinct simplecursoradapter

这是一个有趣的问题,我很震惊,在互联网上没有经常被问到.一旦你启动并运行ContentProvider并学习如何使用它,Android的CursorAdapters非常有用,但由于他们要求将_id字段作为其查询的一部分,所以它们是有限的(没有它就会抛出错误).原因如下:

我的具体问题是我有两个微调器:一个微调器应该包含数据库中唯一的"类别"名称,另一个应该填充所选"类别"的所有数据库条目(类别是列名,在这里).这似乎是一个非常简单的设置,很多程序可能会使用,不是吗?试图实现第一个微调器是我遇到问题的地方.

这是我想要第一个微调器的查询:

SELECT DISTINCT category FROM table;
Run Code Online (Sandbox Code Playgroud)

使此查询在CursorAdapter上引发错误,因为_id列是查询的一部分.将_id列添加到投影自然会返回表的每一行,因为您现在也要求不同的id,并且每个id都是不同的(根据定义).显然,我宁愿每个类别名称只看到一个条目.

我已经实现了一个解决方法,就是简单地进行上面的查询,然后将结果复制到ArrayAdapter中.我这篇文章的原因是看看这个奇怪的小问题是否有一个更优雅的解决方案,并开始讨论我可以做得更好.非常欢迎使用其他实现建议,例如使用不同类型的控件或适配器.

Sil*_*owe 6

这是我最终得到的查询:

SELECT _id, category FROM table_name GROUP BY category;
Run Code Online (Sandbox Code Playgroud)

我在SQLiteDatabase对象上使用了rawQuery()函数来实现它."GROUP BY"片段是获得正确结果的关键,所以感谢用户Sagar指出我正确的方向.

请考虑用户Al Sutton对此问题的回答,因为它可能是解决此问题的更优雅的解决方案.

感谢大家!