这是一个有趣的问题,我感到震惊的问题在互联网上没有被更多地询问。 Android的CursorAdapter非常有用,一旦你启动并运行ContentProvider并学习如何使用它,但由于需要将_id字段作为其查询的一部分(在没有它的情况下抛出错误),它是有限的。原因如下:Android的SimpleCursorAdapter使用DISTINCT查询
我的具体问题是我有两个调整器:一个调整器应该包含来自数据库的唯一“类别”名称,另一个应该填充来自所选“类别”的所有数据库条目(类别是列名称,在这里)。这似乎是许多程序可能使用的非常简单的设置,不是?试图实现第一个微调是我遇到问题的地方。
这里,我想对于第一微调查询:
SELECT DISTINCT category FROM table;
进行此查询,因为_id列时,必须作为查询的一部分上的CursorAdapter抛出一个错误。将_id列添加到投影中自然会返回表的每一行,因为您现在也要求不同的id,并且每个id都是不同的(根据定义)。很明显,我宁愿每个类别名称只看到一个条目。
我已经实现了一种解决方法,它只是简单地进行上面的查询,然后将结果复制到ArrayAdapter中。我之所以写这篇文章是为了看看这个奇怪的小问题是否有更优雅的解决方案,并开始讨论我可以做得更好。备用实施建议,例如使用不同类型的控制或适配器,非常受欢迎。
哦,这看起来像优秀的数据库设计我!为了让我的内容提供者尽可能简单,我被告知要尽量减少表的数量,否则我会按照你的建议去做。感谢您添加此! – SilithCrowe 2011-02-15 17:11:44
您的内容提供者可以使用多表查询来处理提供给它并从其返回的行中的类别名称。看看SQL“join”指令。 – 2011-02-17 08:13:40