这是一个有趣的问题,令我震惊的是,在 Internet 上很少有人问这个问题。一旦您启动并运行 ContentProvider 并学习如何使用它,Android 的 CursorAdapters 就非常有用,但由于它们要求将 _id 字段作为查询的一部分(没有它会抛出错误),因此它们受到限制。原因如下:
我的具体问题是我有两个微调器:一个微调器应该包含来自数据库的唯一“类别”名称,另一个应该填充来自所选“类别”的所有数据库条目(类别是列名,在这里).这似乎是一个非常简单的设置,很多程序都可以使用,不是吗?我在尝试实现第一个微调器时遇到了问题。
这是我想要的第一个微调器的查询:
SELECT DISTINCT category FROM table;
进行此查询会在 CursorAdapter 上引发错误,因为 _id 列是查询的一部分。将 _id 列添加到投影中自然会返回表的每一行,因为您现在也要求不同的 id,并且每个 id 都是不同的(根据定义)。显然,我宁愿每个类别名称只看到一个条目。
我已经实现了一个解决方法,即简单地进行上面的查询,然后将结果复制到 ArrayAdapter 中。我写这篇文章的原因是看看是否有更优雅的解决方案来解决这个奇怪的小问题,并开始讨论我可以做得更好的地方。非常欢迎其他实现建议,例如使用不同种类的控件或适配器。
最佳答案
这是我最终得到的查询:
SELECT _id, category FROM table_name GROUP BY category;
我在 SQLiteDatabase 对象上使用了 rawQuery() 函数来执行此操作。 “GROUP BY”部分是获得正确结果的关键,因此感谢用户 Sagar 为我指明了正确的方向。
请同时考虑用户 Al Sutton 对这个问题的回答,因为它可能是解决这个问题的更优雅的方法。
谢谢大家!
关于Android 的 SimpleCursorAdapter 使用 DISTINCT 进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5004718/