天天看點

Android 手機通訊錄修改聯系人失敗的坑

一般我們添加聯系人的時候,是通過查詢 raw_contacts 表的 _id 字段,擷取最末尾的 _id 值 +1 便是該表中需要添加的 contact_id 值。

一般情況下,contact_id 的值應該和 _id 的值是相等的。但是在第三方應該的大量增删改查下,會出現 contact_id 和 _id 不相等的情況。也就是說,即使你在代碼中存入的 contact_id 為目前的 _id 值,但真正執行資料庫操作時,存入的确實之前 contact_id + 1 的值。

可是,contact_id 的值和 _id 值不相同會導緻什麼情況呢。

根據網上的資料,大部分開發者查詢聯系人時,是使用 raw_contacts 表的 contact_id 值和 data 表的 raw_contact_id 進行比對。如果 raw_contacts 表中的contact_id 值和 _id 值相等時,可以正常使用。一旦 contact_id 值和 _id 值出現不相等的情況,就會出現修改聯系人失敗甚至修改到其他的聯系人這些情況。

為什麼呢?原因是系統預設使用 raw_contacts 表的 _id 值和 data 表的 raw_contact_id 進行比對。是以當我們拿到 raw_contacts 表的 contact_id 值去查找病修改聯系人時,出現失敗的情況。

是以,我們在開發的時候,盡量使用 raw_contacts 表 _id 值對 data 表的 raw_contact_id 值進行比對。進而不會導緻比對失敗的問題。