光标与每个联系人一个电话号码

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"; 非常感谢!这真的很有帮助。

以上是关于光标与每个联系人一个电话号码的主要内容,如果未能解决你的问题,请参考以下文章

获取带有全名详细信息和电话号码的 SINGLE 光标

Android 光标错误 - 确保光标已正确初始化

光标错误,从电话联系人列表中获取电话联系人

通过 ID 获取联系电话号码 - 空光标

获取 Android 联系人光标异常

显示 android 联系人 + 电话号码的最佳做法