Android 联系人数据字段可以编辑但不能创建
Posted
技术标签:
【中文标题】Android 联系人数据字段可以编辑但不能创建【英文标题】:Android contact data fields can edit but not create 【发布时间】:2013-03-28 14:32:09 【问题描述】:我使用此代码更新联系人的地址,但它仅适用于具有现有地址的联系人。如果联系人地址字段为空,则 update() 方法返回零并且不更新联系人数据。如何向现有联系人添加地址?
//str_id is the contact's ID
//input is the String representing an address
ContentValues cv = new ContentValues();
String[] params = new String[] str_id, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE ;
cv.put(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, input);
getContentResolver().update(ContactsContract.Data.CONTENT_URI, cv, ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?", params);
我也尝试了 ContentProviderOperation 的等效逻辑,但得到了相同的结果。就像我之前的示例一样,我可以更新现有地址但不能创建地址。
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, id)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, input)
.build());
【问题讨论】:
【参考方案1】:更新地址前需要检查地址是否存在, 如果地址存在,您的上述代码将正常工作,因为您正在更新..
在插入地址时,实际上你在做a child insert" see here,很好地解释了与你的问题密切相关的 ContentProviderOperation..
【讨论】:
以上是关于Android 联系人数据字段可以编辑但不能创建的主要内容,如果未能解决你的问题,请参考以下文章