我无法理解为什么我不能输入电子邮件地址,除非您先插入名称,如果评论部分设置了电子邮件的名称,但我不能正确地输入名称,任何人都可以帮忙吗? / p>
public String updateContact(String id, String name, String number,
String email, String surname, Context context,
ArrayList<EmailContactBean> listEmail) {
String resultId = null;
if (id == null) {
resultId = addContact(context, name, surname, number, email);
} else {
String raw_contact_id = getRawContactId(id, context);
ContentResolver contentResolver = context.getContentResolver();
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
// update name
ops.add(ContentProviderOperation
.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(ContactsContract.Data.CONTACT_ID + "=?",
new String[] { id })
.withValue(StructuredName.GIVEN_NAME, name).build());
// update surname
ops.add(ContentProviderOperation
.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(COLUMN_CONTACT_ID + "=? ",
new String[] { id })
.withValue(StructuredName.DATA3, surname).build());
// update number
Cursor numberCur = contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[] { id }, null);
if ((null == numberCur) || (!numberCur.moveToFirst())) {
ops.add(ContentProviderOperation
.newInsert(ContactsContract.Data.CONTENT_URI)
.withValue(ContactsContract.Data.RAW_CONTACT_ID,
raw_contact_id)
.withValue(ContactsContract.Data.MIMETYPE,
Phone.CONTENT_ITEM_TYPE)
.withValue(
ContactsContract.CommonDataKinds.Phone.NUMBER,
number).build());
} else {
ops.add(ContentProviderOperation
.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(
COLUMN_CONTACT_ID + "=? AND " + COLUMN_MIMETYPE
+ "=?",
new String[] { id, MIMETYPE_STRING_PHONE })
.withValue(COLUMN_NUMBER, number)
.build());
}
// update email
Cursor emailCur = contentResolver.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
new String[] { id }, null);
if ((null == emailCur) || (!emailCur.moveToFirst())) {
ops.add(ContentProviderOperation
.newInsert(ContactsContract.Data.CONTENT_URI)
.withValue(ContactsContract.Data.RAW_CONTACT_ID,
raw_contact_id)
.withValue(ContactsContract.Data.MIMETYPE,
Email.CONTENT_ITEM_TYPE)
.withValue(Email.TYPE, listEmail.get(0).getType())
.withValue(ContactsContract.CommonDataKinds.Email.DATA,
listEmail.get(0).getName()).build());
} else {
for (int i = 0; i < listEmail.size(); i++) {
ops.add(ContentProviderOperation
.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(
ContactsContract.Data._ID + "=? AND "
+ COLUMN_MIMETYPE + "=?",
new String[] { listEmail.get(i).getId(),
MIMETYPE_STRING_EMAIL })
.withValue(COLUMN_EMAIL, listEmail.get(i).getName())
.withValue(COLUMN_EMAIL_TYPE,
listEmail.get(i).getType()).build());
}
}
try {
contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
}
}
return resultId;
}
我解决了,只是不要设置 MIMETYPE 的姓名:
// update name
ops.add(ContentProviderOperation
.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(
ContactsContract.Data.CONTACT_ID + "=? AND "
+ COLUMN_MIMETYPE + "=?",
new String[] { id, MIMETYPE_STRING_NAME })
.withValue(StructuredName.DATA2, name).build());
// update surname
ops.add(ContentProviderOperation
.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(
COLUMN_CONTACT_ID + "=? AND " + COLUMN_MIMETYPE
+ "=?",
new String[] { id, MIMETYPE_STRING_NAME })
.withValue(StructuredName.DATA3, surname).build());