2010-11-14 48 views
0

我有一個大touble中的Android 2.1更新添加重複的聯繫人字段時1的Android不添加的所有聯繫人與重複字段

請看看我的代碼:

 ArrayList<ContentProviderOperation> op_list = new ArrayList<ContentProviderOperation>(); 

    op_list.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
     .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
     .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 
     .build()); 

    // first and last names 
     op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
    .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
     .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
     .withValue(StructuredName.GIVEN_NAME, "MyFirstName") 
     .withValue(StructuredName.FAMILY_NAME, "MyLastName") 
     .build()); 

    try{ 
    ContentProviderResult[] results = cResolver.applyBatch(ContactsContract.AUTHORITY, op_list); 
    }catch(Exception e){ 
    e.printStackTrace(); 
    } 

嘗試運行這段代碼在20次迭代循環中,然後轉到聯繫人應用程序 ,您將看到只有8個聯繫人掛在那裏! 當我插入重複的電子郵件,電話,組織時,也會出現此問題。 嘗試從0-> 200的循環中,android會發瘋!

我的代碼有問題嗎?有沒有解決這個問題的方法?

任何幫助將非常感謝... 謝謝!

回答

9

後2個非睡眠日...重讀我的代碼並重寫我的類 我找到了解決方案:有一列我不知道,它甚至不存在於以前稱爲的API中:AGGREGATION_MODE

所以解決方案原來是這樣的:

ArrayList<ContentProviderOperation> op_list = new ArrayList<ContentProviderOperation>(); 
     op_list.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
      .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
      .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 
      .withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DISABLED) 

      .build()); 

     // first and last names 
      op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
     .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
      .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
      .withValue(StructuredName.GIVEN_NAME, "MyFirstName") 
      .withValue(StructuredName.FAMILY_NAME, "MyLastName") 
      .build()); 

     try{ 
     ContentProviderResult[] results = cResolver.applyBatch(ContactsContract.AUTHORITY, op_list); 
     }catch(Exception e){ 
     e.printStackTrace(); 
     } 
+0

謝謝你!終於獲得了地址簿中添加的聯繫人! – Ads 2010-12-10 06:05:55

+0

.... ur welcome :) – Shatazone 2010-12-12 22:17:16

+0

你是我的英雄!!!另一個經典的Android上非常差的文檔例子... bha!再次感謝你。 – 2013-12-07 17:52:22

0

你應該嘗試直接插入了ContentResolver的,也許這將有助於(我還沒有嘗試插入20倍相同的接觸,所以我不知道這是否會令任何區別)

+0

生病現在試試... – Shatazone 2010-11-14 02:02:27

+0

好吧...它沒有工作...相同的結果 – Shatazone 2010-11-14 02:19:59

+0

奇怪的...解釋這一點:當你嘗試20多歲,你得到你的8,如果你再次運行應用程序可以您是否再添加一些記錄? – apps 2010-11-14 02:23:49

1

聯繫人被合併到新的api中(sdk> 2.0)。

所有屬於特定規則集的聯繫人都會自動合併,以顯示聯繫人列表中的單個聯繫人。

這組規則包括 1.具有相同名字和姓氏的聯繫人。 2.具有相同郵件ID的聯繫人。 3.聯繫人姓名和電話號碼匹配...等。

在顯示聯繫人詳細信息屏幕中,重複項不可見。 如果您嘗試編輯聯繫人,您會發現您輸入的聯繫人的所有實例。 (即,如果輸入了一個聯繫人10次,則可以依次看到10個不同的實例)。您可以在其中編輯任何特定的聯繫人。

由於Android 2.0支持多個帳戶,因此該場景將存在。

相關問題