以下代码是更新联系人。我能够更新电话号码字段,但我正在尝试更新联系人姓名(在评论行内),但我无法理解代码,任何人都可以帮我解决这个问题。
String new_phoneNumber = update_phonenumber.getText()
.toString();
String new_name = update_name.getText().toString();
ContentResolver cr = getContentResolver();
String where = ContactsContract.Data.DISPLAY_NAME
+ " = ? AND "
+ ContactsContract.Data.MIMETYPE
+ " = ? AND "
+ String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE)
+ " = ? ";
String[] params = new String[] {
get_name,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) };
Cursor phoneCur = managedQuery(
ContactsContract.Data.CONTENT_URI, null, where, params,
null);
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
if ((null == phoneCur)) {
Toast.makeText(getApplicationContext(), "Empty Contact",
Toast.LENGTH_LONG).show();
} else {
ops.add(ContentProviderOperation
.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(where, params)
.withValue(
ContactsContract.CommonDataKinds.Phone.DATA,
new_phoneNumber)/***.withValue(
ContactsContract.CommonDataKinds.Phone.DATA,
new_name)***/
.build());
}
phoneCur.close();
try {
cr.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OperationApplicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), "Successfully updated",
Toast.LENGTH_LONG).show();
答案 0 :(得分:2)
您可以在代码中添加另一个ops.add并插入以下代码。
ops.add(ContentProviderOperation
.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(Data.DATA1 + "=?", new String[] {get_name})
.withValue(
StructuredName.DISPLAY_NAME,
new_name)
.build());
答案 1 :(得分:0)
通过此链接,它将解释ContactContract的工作原理
http://developer.android.com/guide/topics/providers/contacts-provider.html
每个字段(电子邮件,名称,地址)都有mime类型,您应该使用它来更新字段。
让我们尝试更新电子邮件。
首先,您应该找到要更新的详细信息。我们将使用Data表,其中每个Data.RAW_CONTACT_ID代表一些联系人的详细信息。
因此,我们需要找到Data.RAW_CONTACT_ID,其中id是您要编辑的联系人的ID。
现在我们需要找到电子邮件的mime-type(表示详细信息的特定行)(Email.CONTENT_ITEM_TYPE)。
电子邮件的数据存储在Email.DATA列中 - 我们在那里放了新电子邮件。然后我们构建一个查询,最后应用更改。