2016-08-27 122 views
1

我已經經歷了很多帖子,但沒有找到任何有效或甚至正確回答問題的答案。我最近的是這個How to avoid duplicate contact name (data) while loading contact info to listview?,但是這有太多的開銷。有沒有更簡單或更有效的方法來解決這個問題?Android:在使用ContactsContract.CommonDataKinds.Phone檢索聯繫人時重複聯繫人數據

+0

你想避免重複的電話號碼或重複的聯繫人姓名嗎?一個聯繫人可能有多個電話號碼,因此每個號碼都會列出相同的顯示名稱。 –

+0

我知道這個問題,但問題是它給我重複的數字。 –

+0

好吧,我遇到了同樣的問題!讓我知道我的答案是否有幫助。 –

回答

8

我有同樣的問題,你有:我得到重複的電話號碼。我通過爲每個光標條目獲得標準化數字並使用HashSet來跟蹤我已經找到的數字來解決這個問題。試試這個:

private void doSomethingForEachUniquePhoneNumber(Context context) { 
    String[] projection = new String[] { 
      ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
      ContactsContract.CommonDataKinds.Phone.NUMBER, 
      ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER, 
      //plus any other properties you wish to query 
    }; 

    Cursor cursor = null; 
    try { 
     cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, null, null, null); 
    } catch (SecurityException e) { 
     //SecurityException can be thrown if we don't have the right permissions 
    } 

    if (cursor != null) { 
     try { 
      HashSet<String> normalizedNumbersAlreadyFound = new HashSet<>(); 
      int indexOfNormalizedNumber = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER); 
      int indexOfDisplayName = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 
      int indexOfDisplayNumber = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 

      while (cursor.moveToNext()) { 
       String normalizedNumber = cursor.getString(indexOfNormalizedNumber); 
       if (normalizedNumbersAlreadyFound.add(normalizedNumber)) { 
        String displayName = cursor.getString(indexOfDisplayName); 
        String displayNumber = cursor.getString(indexOfDisplayNumber); 
        //haven't seen this number yet: do something with this contact! 
       } else { 
        //don't do anything with this contact because we've already found this number 
       } 
      } 
     } finally { 
      cursor.close(); 
     } 
    } 
} 
+0

它工作完美謝謝分享解決方案 –

+0

@ gaurav4sarma我很高興它幫助你了! –

+0

當然不是問題,同時你也可以請upvote這個問題。謝謝 –