2010-09-12 34 views
0

我需要列出屬於單個帳戶的所有聯繫人的「顯示名稱」。需要使用Android中的單個光標從內容提供者獲取聯繫人帳戶名稱和聯繫人顯示名稱

我打算使用遊標適配器來填充列表,因此需要在單個內容提供者查詢中提取相應的字段(顯示名稱,帳戶信息)。

查看聯繫人數據庫結構原始聯繫人,聯繫人和數據中的單個表將無法提供這兩個參數,因此聯接是必要的。

據我所知,連接將不可能從內容提供者獲取數據。

您能否讓我知道問題的解決方案?

在此先感謝。

+0

我想知道你是否曾經爲此找到過解決方案。我有同樣的問題,還沒有找到答案。 – Chillie 2011-12-28 18:22:01

回答

1

您可以在ContactsContract.RawContacts上選擇您的帳戶名稱,然後在ContactsContract.RawContacts.data表上選擇MIME類型CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE

+0

感謝dco maeglin給你的輸入。但我需要使用一個單一的光標,我不會爲ContactsContract.RawContacts,ContactsContract.RawContacts.data :( – 2010-11-25 17:56:46

1

下面是代碼(這將填補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. 
} 
相關問題