android - 更新联系人生日的正确方法
问题描述
我正在尝试更新联系人的生日字段。无论我如何尝试,我总是会遇到问题,比如复制字段。
我尝试删除当前生日并插入一个新生日:
// Update value.
val list = java.util.ArrayList<ContentProviderOperation>()
// Delete current value.
val updateSelection = """${ContactsContract.Data.RAW_CONTACT_ID} = ? AND
${ContactsContract.Data.MIMETYPE} = ? AND
${CommonDataKinds.Event.TYPE} =
${CommonDataKinds.Event.TYPE_BIRTHDAY}"""
val selectionArgs = arrayOf(
rawId.toString(), CommonDataKinds.Event.CONTENT_ITEM_TYPE)
list.add(ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI)
.withSelection(updateSelection, selectionArgs)
.build())
// Add updated value.
list.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValue(ContactsContract.Data.RAW_CONTACT_ID, rawId)
.withValue(ContactsContract.Data.MIMETYPE,
CommonDataKinds.Event.CONTENT_ITEM_TYPE)
.withValue(CommonDataKinds.Event.START_DATE, birthdate)
.withValue(CommonDataKinds.Event.TYPE,
CommonDataKinds.Event.TYPE_BIRTHDAY)
.build())
我也尝试过直接更新值:
list.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(updateSelection, selectionArgs)
.withValue(ContactsContract.Data.RAW_CONTACT_ID, rawId)
.withValue(ContactsContract.Data.MIMETYPE,
CommonDataKinds.Event.CONTENT_ITEM_TYPE)
.withValue(CommonDataKinds.Event.START_DATE, birthdate)
.withValue(CommonDataKinds.Event.TYPE,
CommonDataKinds.Event.TYPE_BIRTHDAY)
.build())
更新生日的正确方法是什么?
解决方案
两种方法都应该有效,但是我会投票支持第一种方法,因为如果原始联系人尚未包含生日,则第二种方法将不起作用。
我假设 newDelete 操作没有找到现有的生日,这将导致创建两个生日而不是更新现有的生日。
applyBatch
您可以通过检查调用 ( )的返回值来验证这确实是问题所在ContentProviderResult[]
,因此如果删除是第一个操作,您可以检查是否results[0].count
等于 1(删除了一行)。
我相信问题可能在于您的选择/参数没有转义TYPE_BIRTHDAY
值,试试这个:
val updateSelection = """${Data.RAW_CONTACT_ID} = ? AND
${Data.MIMETYPE} = ? AND
${Event.TYPE} = ?"""
val selectionArgs = arrayOf(
rawId.toString(), Event.CONTENT_ITEM_TYPE, Event.TYPE_BIRTHDAY)
推荐阅读
- kubernetes - 添加存储会导致在 openshift pod 上的部署卡住
- python - 我正在用python处理一些练习数据集
- java - 我可以在 Spring Boot 中(不在标题中)从用户加载内容吗?
- java - 如何在cardView中间实现之字形视图
- python - Python 类中的字符串存储包括换行符
- php - 通过用户 ID 在 WooCommerce 中获取单个客户的所有订单和订单数据
- javascript - 通过函数在无状态组件中创建 JSX
- python - 如何在 django admin 中添加自定义按钮以运行 django 管理命令
- iphone - 我想添加一个删除帖子按钮
- sql-server - SSRS 报告在 TLS 1.2 后不起作用