Android通讯录内容提供商返回联系人没有重复的联系人

问题描述:

public static String getContactName(Context context, String id, String address){ 

     if(id==null){ 
      if(address==null){ 
       return null; 
      }else{ 
       return PhoneNumberUtils.formatNumber(address); 
      } 
     } 

     Cursor cursor = context.getContentResolver().query(
       ContactsContract.Data.CONTENT_URI, 
       null, 
       null, 
       null, 
       null); 

     if(cursor!=null){ 
      try{ 
       if(cursor.moveToFirst()){ 
        do{ 
         for(int i=0;i<cursor.getColumnCount();++i){ 
          String columnName = cursor.getColumnName(i); 
          String columnText = cursor.getString(i); 
          Log.d(columnName, columnText==null ? "null":columnText); 
         } 
         Log.d("endline","***************************"); 
        }while(cursor.moveToNext()); 


       }else{ 
        Log.d("cursor", "not greater than 0"); 
       } 
      }finally{ 
       cursor.close(); 
      } 
     } 

     if(address != null){ 
      return PhoneNumberUtils.formatNumber(address); 
     } 

     return "just testing shit"; 
    } 

所以我的问题是,当我回到我的所有联系人我得到每个联系人的多个副本同一联系人的多个副本,我不知道为什么,或什么做这件事。我在这里查看了我的联系人:https://www.google.com/contacts/#contactsAndroid通讯录内容提供商返回联系人没有重复的联系人

以及从手机中删除所有联系人并重新发送到谷歌联系人以确保没有重复。我无法理解发生了什么,尽管我可能只是以某种方式愚蠢。

这里是输出的样子(截断几个触点)

第一招:

第二个
sort_key: James LaChance 
photo_uri: null 
status_label: null 
status_ts: null 
status_res_package: null 
name_verified: 0 
display_name: James LaChance 
last_time_used: null 
mimetype: vnd.android.cursor.item/photo 
phonebook_label_alt: L 
data6: null 
version: 3 
photo_id: null 
data3: null 
custom_ringtone: null 
times_contacted: 0 
account_type_and_data_set: com.google 
dirty: 0 
data7: null 
data15: null 
raw_contact_is_user_profile: 0 
data_set: null 
phonebook_label: J 
data10: null 
res_package: null 
account_type: com.google 
data11: null 
display_name_alt: LaChance, James 
lookup: 3448i1629e6890832873d 
phonetic_name: null 
last_time_contacted: 0 
contact_last_updated_timestamp: 1403954657613 
data13: null 
in_visible_group: 1 
chat_capability: null 
data9: null 
data_sync1: https://www.google.com/m8/feeds/photos/media/jmsmaupin1%40gmail.com/1629e6890832873d 
sort_key_alt: LaChance, James 
contact_presence: null 
data_version: 0 
phonetic_name_style: 0 
name_raw_contact_id: 1 
raw_contact_id: 1 
send_to_voicemail: 0 
data4: null 
data12: null 
contact_status: null 
contact_status_label: null 
pinned: 2147483647 
status_icon: null 
status: null 
data1: null 
phonebook_bucket: 10 
data_sync2: null 
contact_status_res_package: null 
in_default_directory: 1 
_id: 1 
is_super_primary: 0 
data5: null 
contact_id: 8 
data8: null 
is_primary: 0 
data_sync4: 0 
has_phone_number: 1 
display_name_source: 40 
photo_file_id: null 
data_sync3: null 
data14: null 
contact_status_ts: null 
phonebook_bucket_alt: 12 
mode: null 
data2: null 
group_sourceid: null 
starred: 0 
photo_thumb_uri: null 
times_used: null 
contact_status_icon: null 
contact_chat_capability: null 
sourceid: 1629e6890832873d 

sort_key: James LaChance 
photo_uri: null 
status_label: null 
status_ts: null 
status_res_package: null 
name_verified: 0 
display_name: James LaChance 
last_time_used: null 
mimetype: vnd.android.cursor.item/name 
phonebook_label_alt: L 
data6: null 
version: 3 
photo_id: null 
data3: LaChance 
custom_ringtone: null 
times_contacted: 0 
account_type_and_data_set: com.google 
dirty: 0 
data7: null 
data15: null 
raw_contact_is_user_profile: 0 
data_set: null 
phonebook_label: J 
data10: 1 
res_package: null 
account_type: com.google 
data11: 0 
display_name_alt: LaChance, James 
lookup: 3448i1629e6890832873d 
phonetic_name: null 
last_time_contacted: 0 
contact_last_updated_timestamp: 1403954657613 
data13: null 
in_visible_group: 1 
chat_capability: null 
data9: null 
data_sync1: null 
sort_key_alt: LaChance, James 
contact_presence: null 
data_version: 0 
phonetic_name_style: 0 
name_raw_contact_id: 1 
raw_contact_id: 1 
send_to_voicemail: 0 
data4: null 
data12: null 
contact_status: null 
contact_status_label: null 
pinned: 2147483647 
status_icon: null 
status: null 
data1: James LaChance 
phonebook_bucket: 10 
data_sync2: null 
contact_status_res_package: null 
in_default_directory: 1 
_id: 2 
is_super_primary: 0 
data5: null 
contact_id: 8 
data8: null 
is_primary: 0 
data_sync4: 10 
has_phone_number: 1 
display_name_source: 40 
photo_file_id: null 
data_sync3: null 
data14: null 
contact_status_ts: null 
phonebook_bucket_alt: 12 
mode: null 
data2: James 
group_sourceid: null 
starred: 0 
photo_thumb_uri: null 
times_used: null 
contact_status_icon: null 
contact_chat_capability: null 
sourceid: 1629e6890832873d 

林白痴。我问这个问题后几乎立即就找到了我的问题的答案。

参考:https://stackoverflow.com/a/3591323/2408279

本质上存在用于每个接触类型的引用I.E.电子邮件,电话等(如果我没有错)

+0

我不知道答案,但在未来 – pskink

+0

使用DatabaseUtils.dumpCursor我不知道这是一个事...我觉得愚蠢的现在哈哈。 – jmsGears1

+0

为什么愚蠢? Errare humanum est – pskink

您应该查询ContactsContract.CommonDataKinds.Phone,CONTENT_URI表,而让我知道它是否有帮助。

而作为pskink说,使用DatabaseUtils.dumpCursor登录光标..简单