Java 在Android 2.3.5中插入多个联系人

Java 在Android 2.3.5中插入多个联系人,java,android,Java,Android,我正在尝试从我的应用程序中添加多个联系人。我从xml文件中读取数据,然后将其包装到强类型对象列表中。这些对象,然后循环通过,我正在为每个对象调用一个插入到用户联系人中 然而,我在测试时得到了一些非常奇怪的结果,其中我得到了一个或两个工作联系人,然后是一些空(未知)条目。成功输入的次数(未知数)似乎是随机的,但我不知道为什么我不能执行一些应该相当简单的操作 下面是我的click事件,它启动命令获取数据,然后将数据添加到contacts。我可以确认数据每次都被读取到联系人列表中,因此数据没有问题 p

我正在尝试从我的应用程序中添加多个联系人。我从xml文件中读取数据,然后将其包装到强类型对象列表中。这些对象,然后循环通过,我正在为每个对象调用一个插入到用户联系人中

然而,我在测试时得到了一些非常奇怪的结果,其中我得到了一个或两个工作联系人,然后是一些空(未知)条目。成功输入的次数(未知数)似乎是随机的,但我不知道为什么我不能执行一些应该相当简单的操作

下面是我的click事件,它启动命令获取数据,然后将数据添加到contacts。我可以确认数据每次都被读取到联系人列表中,因此数据没有问题

public void onClick(View v) {
    List<AddressContent> contacts = GetAddresses();     
    int counter = 0;        

    if (!contacts.isEmpty()) {                  
        ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

        for (int i = 0; i < contacts.size(); i++) {             

            ops.add(ContentProviderOperation
                    .newInsert(ContactsContract.RawContacts.CONTENT_URI)
                    .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE,
                            null)
                    .withValue(ContactsContract.RawContacts.ACCOUNT_NAME,
                            null)
                    .withValue(ContactsContract.RawContacts.AGGREGATION_MODE, 
                            ContactsContract.RawContacts.AGGREGATION_MODE_DISABLED).build());

            // ------------------------------------------------------ Name

            ops.add(ContentProviderOperation
                    .newInsert(ContactsContract.Data.CONTENT_URI)
                    .withValueBackReference(
                            ContactsContract.Data.RAW_CONTACT_ID, i)
                    .withValue(
                            ContactsContract.Data.MIMETYPE,
                            ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                    .withValue(
                            ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
                            contacts.get(i).getName()).build());

            // ------------------------------------------------------ Work
            // Number

            ops.add(ContentProviderOperation
                    .newInsert(ContactsContract.Data.CONTENT_URI)
                    .withValueBackReference(
                            ContactsContract.Data.RAW_CONTACT_ID, i)
                    .withValue(
                            ContactsContract.Data.MIMETYPE,
                            ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                    .withValue(
                            ContactsContract.CommonDataKinds.Phone.NUMBER,
                            contacts.get(i).getPhone())
                    .withValue(
                            ContactsContract.CommonDataKinds.Phone.TYPE,
                            ContactsContract.CommonDataKinds.Phone.TYPE_WORK)
                    .build());

            // ------------------------------------------------------ Fax
            // Number

            ops.add(ContentProviderOperation
                    .newInsert(ContactsContract.Data.CONTENT_URI)
                    .withValueBackReference(
                            ContactsContract.Data.RAW_CONTACT_ID, i)
                    .withValue(
                            ContactsContract.Data.MIMETYPE,
                            ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                    .withValue(
                            ContactsContract.CommonDataKinds.Phone.NUMBER,
                            contacts.get(i).getFax())
                    .withValue(
                            ContactsContract.CommonDataKinds.Phone.TYPE,
                            ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK)
                    .build());

            // ------------------------------------------------------ Email

            ops.add(ContentProviderOperation
                    .newInsert(ContactsContract.Data.CONTENT_URI)
                    .withValueBackReference(
                            ContactsContract.Data.RAW_CONTACT_ID, i)
                    .withValue(
                            ContactsContract.Data.MIMETYPE,
                            ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
                    .withValue(ContactsContract.CommonDataKinds.Email.DATA,
                            contacts.get(i).getEmail())
                    .withValue(
                            ContactsContract.CommonDataKinds.Email.TYPE,
                            ContactsContract.CommonDataKinds.Email.TYPE_WORK)
                    .build());

            // ------------------------------------------------------
            // Organisation

            ops.add(ContentProviderOperation
                    .newInsert(ContactsContract.Data.CONTENT_URI)
                    .withValueBackReference(
                            ContactsContract.Data.RAW_CONTACT_ID, i)
                    .withValue(
                            ContactsContract.Data.MIMETYPE,
                            ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
                    .withValue(
                            ContactsContract.CommonDataKinds.Organization.COMPANY,
                            contacts.get(i).getCompany())
                    .withValue(
                            ContactsContract.CommonDataKinds.Organization.TYPE,
                            ContactsContract.CommonDataKinds.Organization.TYPE_WORK)
                    .build());

            // ------------------------------------------------------
            // Address              

            ops.add(ContentProviderOperation
                    .newInsert(ContactsContract.Data.CONTENT_URI)
                    .withValueBackReference(
                            ContactsContract.Data.RAW_CONTACT_ID, i)
                    .withValue(
                            ContactsContract.Data.MIMETYPE,
                            ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
                    .withValue(
                            ContactsContract.CommonDataKinds.StructuredPostal.STREET, 
                            contacts.get(i).getStreet())
                    .withValue(
                            ContactsContract.CommonDataKinds.StructuredPostal.CITY, 
                            contacts.get(i).getCity())
                    .withValue(
                            ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, 
                            contacts.get(i).getPostcode())
                    .withValue(
                            ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, 
                            contacts.get(i).getCountry())
                    .withValue(
                            ContactsContract.CommonDataKinds.StructuredPostal.TYPE,
                            ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK)
                    .build());
            counter++;
        }

        try {
            getContentResolver().applyBatch(ContactsContract.AUTHORITY,
                    ops);
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(this, "Error adding contact", Toast.LENGTH_SHORT).show();
            counter--;
        }

        if (counter > 0) {
            if (counter > 1) {
                Toast.makeText(this, "Contacts added", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "Contact added", Toast.LENGTH_SHORT).show();
            }
        }
    }

    if (counter == 0) {
        Toast.makeText(this, "Unable to add contact", Toast.LENGTH_SHORT).show();
    }
}
public void onClick(视图v){
列出联系人=GetAddresses();
int计数器=0;
如果(!contacts.isEmpty()){
ArrayList ops=新的ArrayList();
对于(inti=0;ipublic void onClick(View v) {
List<AddressContent> contacts = GetAddresses();     
int counter = 0;        

if (!contacts.isEmpty()) {                  


    for (int i = 0; i < contacts.size(); i++) {             
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
        ops.add(ContentProviderOperation
                .newInsert(ContactsContract.RawContacts.CONTENT_URI)
                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE,
                        null)
                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME,
                        null)
                .withValue(ContactsContract.RawContacts.AGGREGATION_MODE, 
                        ContactsContract.RawContacts.AGGREGATION_MODE_DISABLED).build());

        // ------------------------------------------------------ Name

        ops.add(ContentProviderOperation
                .newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(
                        ContactsContract.Data.RAW_CONTACT_ID, i)
                .withValue(
                        ContactsContract.Data.MIMETYPE,
                        ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                .withValue(
                        ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
                        contacts.get(i).getName()).build());

        // ------------------------------------------------------ Work
        // Number

        ops.add(ContentProviderOperation
                .newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(
                        ContactsContract.Data.RAW_CONTACT_ID, i)
                .withValue(
                        ContactsContract.Data.MIMETYPE,
                        ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                .withValue(
                        ContactsContract.CommonDataKinds.Phone.NUMBER,
                        contacts.get(i).getPhone())
                .withValue(
                        ContactsContract.CommonDataKinds.Phone.TYPE,
                        ContactsContract.CommonDataKinds.Phone.TYPE_WORK)
                .build());

        // ------------------------------------------------------ Fax
        // Number

        ops.add(ContentProviderOperation
                .newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(
                        ContactsContract.Data.RAW_CONTACT_ID, i)
                .withValue(
                        ContactsContract.Data.MIMETYPE,
                        ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                .withValue(
                        ContactsContract.CommonDataKinds.Phone.NUMBER,
                        contacts.get(i).getFax())
                .withValue(
                        ContactsContract.CommonDataKinds.Phone.TYPE,
                        ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK)
                .build());

        // ------------------------------------------------------ Email

        ops.add(ContentProviderOperation
                .newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(
                        ContactsContract.Data.RAW_CONTACT_ID, i)
                .withValue(
                        ContactsContract.Data.MIMETYPE,
                        ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.Email.DATA,
                        contacts.get(i).getEmail())
                .withValue(
                        ContactsContract.CommonDataKinds.Email.TYPE,
                        ContactsContract.CommonDataKinds.Email.TYPE_WORK)
                .build());

        // ------------------------------------------------------
        // Organisation

        ops.add(ContentProviderOperation
                .newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(
                        ContactsContract.Data.RAW_CONTACT_ID, i)
                .withValue(
                        ContactsContract.Data.MIMETYPE,
                        ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
                .withValue(
                        ContactsContract.CommonDataKinds.Organization.COMPANY,
                        contacts.get(i).getCompany())
                .withValue(
                        ContactsContract.CommonDataKinds.Organization.TYPE,
                        ContactsContract.CommonDataKinds.Organization.TYPE_WORK)
                .build());

        // ------------------------------------------------------
        // Address              

        ops.add(ContentProviderOperation
                .newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(
                        ContactsContract.Data.RAW_CONTACT_ID, i)
                .withValue(
                        ContactsContract.Data.MIMETYPE,
                        ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
                .withValue(
                        ContactsContract.CommonDataKinds.StructuredPostal.STREET, 
                        contacts.get(i).getStreet())
                .withValue(
                        ContactsContract.CommonDataKinds.StructuredPostal.CITY, 
                        contacts.get(i).getCity())
                .withValue(
                        ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, 
                        contacts.get(i).getPostcode())
                .withValue(
                        ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, 
                        contacts.get(i).getCountry())
                .withValue(
                        ContactsContract.CommonDataKinds.StructuredPostal.TYPE,
                        ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK)
                .build());

    try {
        getContentResolver().applyBatch(ContactsContract.AUTHORITY,
                ops);
counter++;
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(this, "Error adding contact", Toast.LENGTH_SHORT).show();
        counter--;
    }
    }



    if (counter > 0) {
        if (counter > 1) {
            Toast.makeText(this, "Contacts added", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "Contact added", Toast.LENGTH_SHORT).show();
        }
    }
}

if (counter == 0) {
    Toast.makeText(this, "Unable to add contact", Toast.LENGTH_SHORT).show();
}
    int backReference;
    ArrayList<ContentProviderOperation> ops = new ArrayList<>();
    for (int i = 0; i < contacts.size(); i++)  {
        Contact contact = contacts.get(i);
        backReference = ops.size();
        ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(RawContacts.CONTENT_URI, true))
                .withYieldAllowed(true)
                .withValue(RawContacts.ACCOUNT_NAME, contact.fullName)
                .withValue(RawContacts.ACCOUNT_TYPE, ACCOUNT_TYPE)
                .withValue(RawContacts.SOURCE_ID, contact.contactId)
                .build());

        ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(ContactsContract.Settings.CONTENT_URI, true))
                .withValue(RawContacts.ACCOUNT_NAME, contact.fullName)
                .withValue(RawContacts.ACCOUNT_TYPE, ACCOUNT_TYPE)
                .withValue(ContactsContract.Settings.UNGROUPED_VISIBLE, 1)
                .build());

        ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true))
                .withValueBackReference(Data.RAW_CONTACT_ID, backReference)
                .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
                .withValue(StructuredName.GIVEN_NAME, contact.firstName)
                .withValue(StructuredName.DISPLAY_NAME, contact.fullName)
                .withValue(StructuredName.FAMILY_NAME, ((contact.preposition != null && !contact.preposition.equals("")) ? contact.preposition + " " : "") + contact.lastName)
                .build());


        for (Number number : contact.numbers) {
            ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true))
                    .withValueBackReference(Data.RAW_CONTACT_ID, backReference)
                    .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                    .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM)
                    .withValue(ContactsContract.CommonDataKinds.Phone.LABEL, TYPE)
                    .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number.number)
                    .build());
        }

        for (Email email : contact.emails) {
            ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true))
                    .withValueBackReference(Data.RAW_CONTACT_ID, backReference)
                    .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
                    .withValue(Email.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM)
                    .withValue(Email.DATA, email.email)
                    .withValue(Email.LABEL, TYPE)
                    .build());
        }
        if (contacts.size() > i+1 && ops.size() + contacts.get(i+1).getTotalInsertions() > 499) {
            try {
                resolver.applyBatch(ContactsContract.AUTHORITY, ops);
            }
            catch (Exception e) {
                e.printStackTrace();
            }
            ops.clear();
        } else if (contacts.size() == i+1) {
            try {
                resolver.applyBatch(ContactsContract.AUTHORITY, ops);
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    }