我需要列出屬於單個帳戶的所有聯繫人的「顯示名稱」。需要使用Android中的單個光標從內容提供者獲取聯繫人帳戶名稱和聯繫人顯示名稱
我打算使用遊標適配器來填充列表,因此需要在單個內容提供者查詢中提取相應的字段(顯示名稱,帳戶信息)。
查看聯繫人數據庫結構原始聯繫人,聯繫人和數據中的單個表將無法提供這兩個參數,因此聯接是必要的。
據我所知,連接將不可能從內容提供者獲取數據。
您能否讓我知道問題的解決方案?
在此先感謝。
我需要列出屬於單個帳戶的所有聯繫人的「顯示名稱」。需要使用Android中的單個光標從內容提供者獲取聯繫人帳戶名稱和聯繫人顯示名稱
我打算使用遊標適配器來填充列表,因此需要在單個內容提供者查詢中提取相應的字段(顯示名稱,帳戶信息)。
查看聯繫人數據庫結構原始聯繫人,聯繫人和數據中的單個表將無法提供這兩個參數,因此聯接是必要的。
據我所知,連接將不可能從內容提供者獲取數據。
您能否讓我知道問題的解決方案?
在此先感謝。
您可以在ContactsContract.RawContacts上選擇您的帳戶名稱,然後在ContactsContract.RawContacts.data表上選擇MIME類型CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE
。
感謝dco maeglin給你的輸入。但我需要使用一個單一的光標,我不會爲ContactsContract.RawContacts,ContactsContract.RawContacts.data :( – 2010-11-25 17:56:46
下面是代碼(這將填補CUR2所有在帳戶每個聯繫人的姓名信息[0]。名稱這僅僅是該帳戶的字符串名稱,它會按名字排序的話):
cur2 = getContentResolver().query(Data.CONTENT_URI, DataQuery.PROJECTION, DataQuery.SELECTION, new String[] {accounts[0].name}, DataQuery.COLUMN_GIVEN_NAME + " ASC");
private interface DataQuery {
public static final String[] PROJECTION =
new String[] {Data._ID, Data.MIMETYPE, Data.DATA1, Data.DATA2,
Data.DATA3, Data.DATA4, Data.DATA5, Data.DATA6, Data.DATA7,
Data.DATA8, Data.DATA9, Data.DATA10, Data.DATA11, Data.DATA12,
Data.DATA13, Data.DATA14, Data.DATA15, ContactsContract.RawContacts.ACCOUNT_NAME };
public static final int COLUMN_ID = 0;
public static final int COLUMN_MIMETYPE = 1;
public static final int COLUMN_DATA1 = 2;
public static final int COLUMN_DATA2 = 3;
public static final int COLUMN_DATA3 = 4;
public static final int COLUMN_DATA4 = 5;
public static final int COLUMN_DATA5 = 6;
public static final int COLUMN_DATA6 = 7;
public static final int COLUMN_DATA7 = 8;
public static final int COLUMN_DATA8 = 9;
public static final int COLUMN_DATA9 = 10;
public static final int COLUMN_DATA10 = 11;
public static final int COLUMN_DATA11 = 12;
public static final int COLUMN_DATA12 = 13;
public static final int COLUMN_DATA13 = 14;
public static final int COLUMN_DATA14 = 15;
public static final int COLUMN_DATA15 = 16;
public static final int COLUMN_PHONE_NUMBER = COLUMN_DATA1;
public static final int COLUMN_PHONE_TYPE = COLUMN_DATA2;
public static final int COLUMN_EMAIL_ADDRESS = COLUMN_DATA1;
public static final int COLUMN_EMAIL_TYPE = COLUMN_DATA2;
public static final int COLUMN_GIVEN_NAME = COLUMN_DATA2;
public static final int COLUMN_MIDDLE_NAME = COLUMN_DATA5;
public static final int COLUMN_FAMILY_NAME = COLUMN_DATA3;
public static final int COLUMN_WEBSITE = COLUMN_DATA1;
public static final int COLUMN_ADDRESS_TYPE = COLUMN_DATA2;
public static final int COLUMN_STREET_ADDRESS = COLUMN_DATA4;
public static final int COLUMN_CITY_ADDRESS = COLUMN_DATA7;
public static final int COLUMN_STATE_ADDRESS = COLUMN_DATA8;
public static final int COLUMN_ZIP_ADDRESS = COLUMN_DATA9;
public static final int COLUMN_ORGANIZATION_NAME = COLUMN_DATA1;
public static final int COLUMN_TITLE = COLUMN_DATA4;
public static final int COLUMN_PHOTO = COLUMN_DATA15;
public static final int COLUMN_NOTES = COLUMN_DATA1;
public static final String SELECTION = ContactsContract.RawContacts.ACCOUNT_NAME + "=? and " + Data.MIMETYPE + "='vnd.android.cursor.item/name'";
//public static final String a = Data.
}
我想知道你是否曾經爲此找到過解決方案。我有同樣的問題,還沒有找到答案。 – Chillie 2011-12-28 18:22:01