光标与每个联系人一个电话号码
Posted
技术标签:
【中文标题】光标与每个联系人一个电话号码【英文标题】:Cursor with one phone number for each contact 【发布时间】:2012-01-05 09:08:09 【问题描述】:我知道如何在光标中获取联系人姓名和号码,但是当我将它们放在列表视图中时,我会在不同的行中获得同一联系人的多个号码,即如果联系人有多个号码,则所有这些号码都是显示。如何为每个联系人选择一个号码?
Uri uri = Phone.CONTENT_URI;
String[] projection = Phone.DISPLAY_NAME, Phone.NUMBER, Phone._ID ;
String sortOrder = Phone.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
Cursor cursor = managedQuery(uri, projection, null, null, sortOrder);
提前感谢您的帮助!
【问题讨论】:
【参考方案1】:如果我说得对,并且您只想在每个 DISPLAY_NAME
中显示一个数字而忽略所有其他数字,则可以使用此 hack:
String selection = "1) GROUP BY (" + Phone.DISPLAY_NAME;
Cursor cursor = managedQuery(uri, projection, selection , null, sortOrder);
edit 简短说明:这是一种 sql 注入:它将在查询的WHERE
部分插入 1,使其始终为真,并添加 GROUP BY
,不受 managedQuery()
支持
【讨论】:
哇,这真的奏效了!谢谢!那么我的整个 SELECT 语句看起来如何呢?我的意思是1从哪里进来?您还提到这是一种黑客行为,这是一种可以接受的使用方式吗? IE。如果我需要扩展代码,我将来会受苦吗? 正如我提到的,它是 sql-injection - 所以如果谷歌决定限制selection
,它可能会停止工作。然而,它似乎是故意留下的。
这是否意味着您可以在selection
中使用其他sql语句,例如LIMIT
?
LIMIT
可以放在 sortOrder 中,因为它应该放在 ORDER BY
语句之后,例如String sortOrder = Phone.DISPLAY_NAME + " COLLATE LOCALIZED ASC" + " LIMIT 10";
非常感谢!这真的很有帮助。以上是关于光标与每个联系人一个电话号码的主要内容,如果未能解决你的问题,请参考以下文章