Android 手機通訊錄修改聯絡人失敗的坑
阿新 • • 發佈:2019-02-18
一般我們新增聯絡人的時候,是通過查詢 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 值進行匹配。從而不會導致匹配失敗的問題。