3

我知道如何检索特定联系人的联系人数据。但是,我找不到在单个查询中获取所有联系人以及他们的一些详细信息的方法。以下代码获取具有邮政地址的所有联系人:

  Uri uri = ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI;
  String[] projection = new String[] {
    StructuredPostal._ID,
    StructuredPostal.LOOKUP_KEY,
    StructuredPostal.DISPLAY_NAME,
    StructuredPostal.STREET,
    StructuredPostal.CITY
  };
  String sortOrder = StructuredPostal.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
  Cursor c = getContentResolver().query(uri, projection, null, null, sortOrder);

但我需要的是所有联系人,无论他们是否有邮寄地址。使用 ContatsContract API 是否可行,或者我是否需要创建自定义外部联接查询?关于如何做的任何提示?

4

2 回答 2

4

如果您有联系人 ID,并且想要获取邮政地址,请使用:

         Uri postal_uri = ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI;
         Cursor postal_cursor  = getContentResolver().query(postal_uri,null,  ContactsContract.Data.CONTACT_ID + "="+contactId.toString(), null,null);
          while(postal_cursor.moveToNext())
            {
             String Strt = postal_cursor.getString(postal_cursor.getColumnIndex(StructuredPostal.STREET));
             String Cty = postal_cursor.getString(postal_cursor.getColumnIndex(StructuredPostal.CITY));
             String cntry = postal_cursor.getString(postal_cursor.getColumnIndex(StructuredPostal.COUNTRY));
            } 
            postal_cursor.close();                   
于 2012-11-20T10:36:17.737 回答
3

Android 2.0 中的所有联系人信息都存储在一个数据库表中。因此,您可以在一个查询中获得所需的所有信息:

Cursor c = getContentResolver().query(ContactsContract.Data.CONTENT_URI,
    null, null, null, sortOrder);

只需遍历数据并检查Data.MIMETYPE列。例如,如果该列有StructuredPostal.CONTENT_ITEM_TYPE值,那么您可以StructuredPostal从该列中获取字段。

于 2011-05-01T13:24:54.710 回答