【问题标题】: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);

提前感谢您的帮助!

【问题讨论】:

    标签: java android cursor android-contentprovider simplecursoradapter


    【解决方案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";
    • 非常感谢!这真的很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2014-05-26
    • 2015-05-18
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多