如何解决更新联系人生日的正确方法
我正在尝试更新联系人的生日字段。无论如何尝试,我总是会遇到问题,例如重复该字段。
我尝试过删除当前生日并插入新的生日:
// 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,CommonDataKinds.Event.TYPE_BIRTHDAY)
.build())
更新生日的正确方法是什么?
解决方法
这两种方法都应该起作用,但是我赞成第一种方法,因为如果原始联系人还没有生日,第二种方法将无效。
我认为newDelete动作找不到现有的生日,这会导致创建两个生日,而不是更新现有的生日。
您可以通过检查applyBatch
调用(ContentProviderResult[]
)的返回值来验证这确实是问题所在,因此,如果删除是第一个操作,则可以检查{{1} }等于1(已删除一行)。
我认为问题可能出在您的选择/参数未转义results[0].count
值上,请尝试以下操作:
TYPE_BIRTHDAY
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。