2015-05-14 88 views
0

我試圖讓所有擁有電子郵件,電話或兩者聯繫人列表聯繫人。 爲此我使用ContentResolver與URI設置爲ContactsContract.Data.CONTENT_URI,我選擇這些條件:獲取具有電子郵件或電話號碼具有獨特的效果

String SELECTION = ContactsContract.Data.DISPLAY_NAME_PRIMARY + "<>'' AND " + ContactsContract.Data.IN_VISIBLE_GROUP + "=1" + " AND (" + ContactsContract.Data.MIMETYPE + "=? OR " + ContactsContract.Data.MIMETYPE + "=?)"; 
String[] SELECTION_ARGS = new String[]{ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE, 
       ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE}; 

我感興趣的只是這種接觸的名稱。但是因爲數據表將每個給定聯繫人的信息保存在單獨的行中,所以得到的光標在其中具有重複的條目。

有什麼辦法那些如何DISTINCT項?我正在使用CursorLoaderManagerCursorAdapter(也許唯一的方法是在加載器結束時將它們過濾出來?)。

+0

你見過[這](http://stackoverflow.com/questions/2315203/android-distinct-and-groupby-in-contentresolver),這是一個有點老,但可能會有所幫助。 –

+0

我已經試過了所有可惜沒有那些「黑客」,幫助因被固定在最新的Android版本或不接觸的內容提供商合作:/ – bakua

回答

0

使用以下代碼。

ContentResolver cr = context.getContentResolver(); 
    String[] PROJECTION = new String[] { ContactsContract.RawContacts._ID, 
      ContactsContract.CommonDataKinds.Phone.NUMBER, 
      ContactsContract.CommonDataKinds.Email.DATA, 
      ContactsContract.CommonDataKinds.Photo.CONTACT_ID }; 
    String order = "CASE WHEN " 
      + ContactsContract.CommonDataKinds.Phone.NUMBER 
      + " NOT LIKE '%@%' THEN 1 ELSE 2 END, " 
      + ContactsContract.Contacts.NUMBER 
      + ", " 
      + ContactsContract.CommonDataKinds.Email.DATA 
      + " COLLATE NOCASE"; 
    String filter = ContactsContract.CommonDataKinds.Email.DATA + " NOT LIKE ''"; 
    Cursor cur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, PROJECTION, filter, null, order); 
+0

ContactsContract.Contacts.NUMBER不存在。你的意思是ContactsContract.CommonDataKinds.Phone.NUMBER? – bakua

+0

查看更新回答 –

+0

但是,這仍然不會排除選擇結果中的重複條目。 – bakua

相關問題