2010-06-01 97 views
0

我在通過API for Android 2.0或更高版本編寫聯繫人時遇到此問題。 每次我寫入我的帳戶中已存在的同一聯繫人(Google帳號爲 )時,我有一部分聯繫人聚合正常,但其他 其他沒有。例如FN,N,ORG,TITLE等字段總是在一個 副本中,但是TEL,EMAIL,ADR都是額外添加的,因此在第二次寫入同一聯繫人後我有 2複製相同的TEL或EMAIL。如何強制API引擎不重複存在的數據?部分聯繫人在每次編寫同一聯繫人後重複(Android 2.0+)

代碼:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
     ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
           .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, accountType) 
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, accountName)      
.build()); 

... 
// adding phone number 

ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
      builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0); 
      builder.withValue(ContactsContract.Data.MIMETYPE, 
        ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
      builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneValue); 
      builder.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, phoneType); // work/home 
      builder.withValue(ContactsContract.CommonDataKinds.Phone.LABEL, phoneLabel); 

      ops.add(builder.build()); 

... 


try { 
      contentResolver.applyBatch(ContactsContract.AUTHORITY, ops); 
     } catch (Exception e) { 
      // 
} 

我試着添加:在AGGREGATION_MODE_DISABLED AGGREGATION_MODE。 但它沒有改變。

我會很高興在這種情況下的任何提示。

BR,虛假

回答

0

我認爲現有的聯繫人你要麼做一個更新,或刪除存在該聯繫人的數據行,做一個insert前,當我從你的代碼明白,你插入東西而不是更新。

+0

是的我使用插入動作,而不是更新,但爲什麼只有一些字段加倍,扭曲,...? – Bogus 2010-06-01 10:42:37

+0

數據表與標準聯繫人字段分開。電話,電子郵件,生日都存儲在單獨的表格中。這就是爲什麼只有這些領域翻了一番。 – Pentium10 2010-06-01 11:35:39

+0

謝謝你的幫助。 我更改newUpdate()上的newInsert(),它對已經存在的聯繫人正常工作,否則沒有被寫入(電話簿是空的)。 工作聚合是如何進行的?我不想將每個聯繫人與新聯繫人進行比較。我認爲聚合引擎應該自己做 - 比較每個字段,並根據需要添加一些更改,但不會加倍。 我不想自己做。 看起來很複雜。我認爲必須有另一種解決方案。 我希望。 – Bogus 2010-06-01 11:57:48