2011-04-07 130 views
4

我最近爲我的應用程序創建了一個同步適配器,它會將我通過網絡請求獲得的聯繫人與手機中的聯繫人同步。我在添加聯繫人時沒有問題,但是當聯繫人信息發生變化時,無法正確更新聯繫人信息。例如聯繫人的公司名稱字段。下面是一些例子查詢我都試過,沒有工作或只有部分工作(即 - 一些聯繫人更新,但不正確):如何更新Android聯繫人公司?

 ContentValues values = new ContentValues(); 
    values.put(ContactsContract.CommonDataKinds.Organization.COMPANY, "New Company"); 
context.getContentResolver().update(Uri.parse("content://com.android.contacts/data/"), values, BaseColumns._ID + "=?", new String[] { String.valueOf(id) }); 

我也試圖在一批這樣被Android文檔的建議:

builder = ContentProviderOperation 
      .newUpdate(ContactsContract.Data.CONTENT_URI); 
    builder.withSelection(BaseColumns._ID + " =?", new String[]{String.valueOf(id)}); 

    builder.withValue(
      ContactsContract.CommonDataKinds.Organization.COMPANY, 
      "New Company Name!"); 
    operationList.add(builder.build()); 

我已閱讀ContactContracts Documentation並且最初是在跟隨此tutorial。我也檢查了在API中的AuthenticatorActivity例子無濟於事。任何幫助是極大的讚賞。

回答

9

花費的時間量筋疲力盡試圖找出正確的查詢後,我相信我已經找到了答案。看起來我需要將BaseColumns._ID更改爲ContactsContract.Data.CONTACT_ID,對於我所做的每個更新,我還必須提供mime類型,我也沒有在android文檔中的任何地方看到它。在這篇文章中發現了很多幫助:Working With Android Contacts

 String orgWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
    String[] orgWhereParams = new String[]{String.valueOf(id), 
     ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE}; 
    operationList 
    .add(ContentProviderOperation 
      .newUpdate(ContactsContract.Data.CONTENT_URI) 
      .withSelection(orgWhere, orgWhereParams) 
      .withValue(
        ContactsContract.CommonDataKinds.Organization.DATA, 
        guCon.getCompany()).build()); 
+2

非常感謝NINJASENSE – 2011-12-07 04:59:14

相關問題