为什么我不能设置电子邮件地址,如果没有设置名称到android之前?

时间:2014-12-03 10:17:42

标签: android android-contentprovider android-contacts android-contentresolver

我无法理解为什么我不能输入电子邮件地址,除非您先插入名称,如果评论部分设置了电子邮件的名称,但我不能正确地输入名称,任何人都可以帮忙吗? / 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());

0 个答案:

没有答案