2013-04-24 46 views
0

刪除此聯繫人我可以更新這樣一個電話號碼:爲什麼我不能在androidÉ

ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI) 
     .withSelection("_id =?", new String[] { id }) 
     .withValue(Phone.NUMBER, "5555555555").build()); 

     getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 

但是,在我更新顯示名稱,但這並沒有工作:

ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI) 
     .withSelection("_id=?", new String[] { id }) 
     .withValue("display_name", "jack").build()); 

這是任何字:

context.getContentResolver().update(
       ContactsContract.Data.CONTENT_URI, 
       values, 
       ContactsContract.CommonDataKinds.StructuredName._ID + "=" 
         + id 
         + " and mimetype='vnd.android.cursor.item/name'", 
       null); 
+0

你試過CommonDataKinds.StructuredName.DISPLAY_NAME而不是「display_name」, – 2013-04-24 02:04:43

+0

CommonDataKinds.StructuredName.DISPLAY_NAME和Phone.NUMBER都是「data1」,那麼如何區分? – user1502241 2013-04-24 02:09:20

回答

2

display_name是隻讀的。

任何想要與聯繫提供商進行詳細工作的人都應該肯定閱讀聯繫人提供程序API指南並遵循聯繫人提供程序Android培訓。聯繫人提供程序是一個包含許多規則的複雜數據庫系統,除非您瞭解提供程序的基本佈局,否則會遇到令人沮喪的問題。

CommonDataKinds.StructuredName.DISPLAY_NAME和CommonDataKinds.Phone.NUMBER都設置爲data1,因爲實際上它們不引用單獨的表。相反,它們都引用ContactContracts.Data中的列DATA1。 全部聯繫人的詳細數據存儲在ContactContracts.Data中,而不管它是什麼。例如,聯繫人的所有電話號碼和所有電子郵件地址都存儲在ContactContracts.Data中。您通過行的MIMETYPE值告訴另一種類型的行的方式。文檔詳細解釋了這一點。

另一個提示:您應該避免在自己的代碼中添加,刪除或更新聯繫人提供程序。相反,發送一個意圖,啓動設備的聯繫人應用程序或允許用戶選擇要使用的聯繫人應用程序。這允許用戶在聯繫人應用中而不是您的應用中完成工作。這也在文檔中描述。