【问题标题】:How to query Contacts that have both a phone number and name?如何查询既有电话号码又有姓名的联系人?
【发布时间】:2010-11-12 14:38:44
【问题描述】:

我在 pre-Android2.0 API 中有以下代码:

    String[] PROJECTION = new String[] { Contacts.People._ID, Contacts.PeopleColumns.NAME, Contacts.Phones.NUMBER };
    Cursor c = mActivity.managedQuery(Contacts.People.CONTENT_URI, PROJECTION, null, null, Contacts.People.DEFAULT_SORT_ORDER);

我应该如何选择来检索同时具有姓名和电话号码的联系人?

【问题讨论】:

    标签: android cursor android-contentprovider android-contacts


    【解决方案1】:

    在 Android 1.6 及更早版本中:

    String[] PROJECTION=new String[] {  Contacts.Phones._ID,
                                        Contacts.Phones.NAME,
                                        Contacts.Phones.NUMBER
                                        };
    Cursor c=a.managedQuery(Contacts.Phones.CONTENT_URI, PROJECTION, null, null, null);
    

    在 Android 2.0 及更高版本中:

    String[] PROJECTION=new String[] {  Contacts._ID,
                                        Contacts.DISPLAY_NAME,
                                        Phone.NUMBER
                                        };
    Cursor c=a.managedQuery(Phone.CONTENT_URI, PROJECTION, null, null, null);
    

    Here is a sample project 演示它们的使用,包括检测和使用基于设备操作系统级别的适当 API。

    【讨论】:

    • 好的,但是如何在这样的查询中获取 People._ID 呢? (该 ID 将用于联系人照片检索)
    • @pixel:好吧,我在这段代码中有点草率(自我注意:清理一下)。第二个示例中的Contacts._ID 是联系人的_ID,这将是您近期查询所需要的。我相信,老年人的等价物是Contacts.Phones.PERSON_ID
    • 谢谢,我没有注意到这个常数。还有一件事-当我有两个电话号码的联系人时,我会得到两行名称相同但电话不同的行。你知道如何用两个号码获得一个联系人吗?
    • @pixel:这不可能,抱歉。您必须自己合并它们。
    • @Angad:“使用这种技术,我无法看到任何同步的联系人”——您需要使用ContactsContract。这个问题来自 2010 年末,当时Contacts 提供者的相关性要高得多。此外,managedQuery() 现在已弃用。 “另外,如何按名称按升序对数字进行排序?” -- 您需要在query()ContentResolver)或CursorLoader 中使用适当的order-by 子句。 “参考你的书,但无法得到这个”——是的,哇,那一章需要认真更新。我会在下一本书的发行中继续这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 2011-03-05
    相关资源
    最近更新 更多