我正在处理我想要更新特定人员联系的应用程序。当我更新只联系姓名,然后它工作正常,但我想更新联系人的全部细节,如电子邮件地址,号码,邮政地址等。
请提供一些有用的链接。提前谢谢。
答案 0 :(得分:3)
每个字段(电子邮件,名称,地址)都有mime类型,您应该使用它 为了更新该字段。
让我们尝试更新电子邮件。
首先,您应该找到要更新的详细信息。 我们将使用Data表,其中每个Data.RAW_CONTACT_ID表示一个细节 关于一些联系。
因此,我们需要找到Data.RAW_CONTACT_ID,其中id是您想要的联系人的ID 编辑。
现在我们需要找到mimetype(代表细节的特定行) 电子邮件(Email.CONTENT_ITEM_TYPE)。
电子邮件的数据存储在Email.DATA列中 - 我们在那里放了新电子邮件。
如果您想要特定的电子邮件类型,则应将其添加到查询中: 例如,如果要添加主电子邮件,则应添加Email.TYPE_HOME 查询。
然后我们构建一个查询并最终应用更改。
这是一个考试:
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
String emailParams = Data.RAW_CONTACT_ID + " = ? AND " + Data.MIMETYPE + " = ?";
String[] emailParamsWhere = new String[] { "contact_id", Email.CONTENT_ITEM_TYPE };
ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI).withSelection(emailParams, emailParamsWhere).withValue(Email.DATA, "new email").withValue(Email.TYPE, Email.TYPE_HOME)
.build());
try
{
ContentProviderResult[] res = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
if (res != null)
{
return true;
}
return false;
}
catch (RemoteException e)
{
Log.d(TAG, e.getMessage());
e.printStackTrace();
}
catch (OperationApplicationException e)
{
Log.d(TAG, e.getMessage());
e.printStackTrace();
}
要更新手机,请使用以下查询:
String phoneParams = Data.RAW_CONTACT_ID + " = ? AND " + Data.MIMETYPE + " = ? AND " + Phone.TYPE + " = " + Phone.TYPE_MOBILE;
String[] phoneParamsWhere = new String[] { "contact_id", Phone.CONTENT_ITEM_TYPE };
ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI).withSelection(phoneParams, phoneParamsWhere).withValue(Phone.NUMBER, "mobile_number")
.withValue(Phone.TYPE, Phone.TYPE_MOBILE).build());
希望我帮助