当我用下面的代码更新联系人名称时,它会在几秒钟内从原始联系人中创建新联系人,然后删除它。
String where = ContactsContract.Data.RAW_CONTACT_ID+" = ? AND "+ContactsContract.Data.MIMETYPE+" = ?";
String[] agrs = {"1",ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE};
ArrayList<ContentProviderOperation> ops = new ArrayList<>();
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(where, agrs)
.withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, "googleName")
.withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, null)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "googleName")
.build());
try {
context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
e.printStackTrace();
}(这个原始联系人来自谷歌,它有一个whatsApp号码)。在执行此更新之前,表如下所示:-
生料表
Account type | contact_id | _id
com.google 6 1
com.whatsapp 6 2联系人表:
Display Name | _id | name_row_contact_id
Lorem 6 1重命名操作联系人表后的如下所示:-
Display Name | _id | name_row_contact_id
googleName | 6 | 1
Lorem | 6 | 2 //---> Why its happening ??*在更新操作几秒钟后,这个Lorem被删除*
!!!在这种情况下,我的应用程序认为添加了新的联系人,然后再删除:(!
在更新联系人名称时,我是否做错了什么??
请帮帮我!
发布于 2020-04-27 08:25:36
我已经找到了问题的原因和解决办法。
当我用行id更改名称时,显然它会重命名,但其他移动应用程序(如WhatsApp )也会在数据库中输入名称尚未更改的内容。这就是为什么Edge 7-设备在Contact表中创建新条目的原因,因为旧名称仍然存在于数据表中(由whatsApp使用)。当WhatsApp执行同步时,这个旧的联系人就会被删除。
解决方案:如果您不是用row_id重命名,而是通过contact_id重命名,那么重命名的最佳原因是。它还将重命名数据表中其他条目的名称。
String where = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
String[] agrs = {contactId, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE};https://stackoverflow.com/questions/61439082
复制相似问题