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 联系人数据字段可以编辑但不能创建的主要内容,如果未能解决你的问题,请参考以下文章

查询 ContactsContract 数据库,比较空字段和空字符串 - Android

如何在 Android 中编辑现有联系人?

Android socket通信能发数据但不能接收到数据?

Android:测试同步适配器

修改Android中已有的联系人

如何从android中的联系人中搜索号码?