{"id":1864,"date":"2022-08-30T15:20:05","date_gmt":"2022-08-30T15:20:05","guid":{"rendered":"https:\/\/unknownerror.org\/index.php\/2013\/12\/02\/inserting-multiple-contacts-in-android-2-3-5-collection-of-common-programming-errors\/"},"modified":"2022-08-30T15:20:05","modified_gmt":"2022-08-30T15:20:05","slug":"inserting-multiple-contacts-in-android-2-3-5-collection-of-common-programming-errors","status":"publish","type":"post","link":"https:\/\/unknownerror.org\/index.php\/2022\/08\/30\/inserting-multiple-contacts-in-android-2-3-5-collection-of-common-programming-errors\/","title":{"rendered":"Inserting Multiple Contacts in Android 2.3.5-Collection of common programming errors"},"content":{"rendered":"<p>I am trying to add multiple contacts from my application. I am reading in data from an xml file and then wrapping this up into a list of strongly typed objects. These objects and then looped through and I am calling an insert into the users contacts for each one.<\/p>\n<p>However I am getting some very bizarre results whilst testing where I am getting either 1 or two working contacts and then a number of empty (Unknown) entries. The number of successful entries over (Unknowns) appears to be random but I am at a loss as to why I cannot perform something that should be fairly simple to do.<\/p>\n<p>My click event which initiates the command to fetch the data and then add it to the contacts is below. I can confirm that the data is being read into the contacts list each time so it is not a problem with the data.<\/p>\n<pre><code>public void onClick(View v) {\n    List contacts = GetAddresses();     \n    int counter = 0;        \n\n    if (!contacts.isEmpty()) {                  \n        ArrayList ops = new ArrayList();\n\n        for (int i = 0; i &lt; contacts.size(); i++) {             \n\n            ops.add(ContentProviderOperation\n                    .newInsert(ContactsContract.RawContacts.CONTENT_URI)\n                    .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE,\n                            null)\n                    .withValue(ContactsContract.RawContacts.ACCOUNT_NAME,\n                            null)\n                    .withValue(ContactsContract.RawContacts.AGGREGATION_MODE, \n                            ContactsContract.RawContacts.AGGREGATION_MODE_DISABLED).build());\n\n            \/\/ ------------------------------------------------------ Name\n\n            ops.add(ContentProviderOperation\n                    .newInsert(ContactsContract.Data.CONTENT_URI)\n                    .withValueBackReference(\n                            ContactsContract.Data.RAW_CONTACT_ID, i)\n                    .withValue(\n                            ContactsContract.Data.MIMETYPE,\n                            ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)\n                    .withValue(\n                            ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,\n                            contacts.get(i).getName()).build());\n\n            \/\/ ------------------------------------------------------ Work\n            \/\/ Number\n\n            ops.add(ContentProviderOperation\n                    .newInsert(ContactsContract.Data.CONTENT_URI)\n                    .withValueBackReference(\n                            ContactsContract.Data.RAW_CONTACT_ID, i)\n                    .withValue(\n                            ContactsContract.Data.MIMETYPE,\n                            ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)\n                    .withValue(\n                            ContactsContract.CommonDataKinds.Phone.NUMBER,\n                            contacts.get(i).getPhone())\n                    .withValue(\n                            ContactsContract.CommonDataKinds.Phone.TYPE,\n                            ContactsContract.CommonDataKinds.Phone.TYPE_WORK)\n                    .build());\n\n            \/\/ ------------------------------------------------------ Fax\n            \/\/ Number\n\n            ops.add(ContentProviderOperation\n                    .newInsert(ContactsContract.Data.CONTENT_URI)\n                    .withValueBackReference(\n                            ContactsContract.Data.RAW_CONTACT_ID, i)\n                    .withValue(\n                            ContactsContract.Data.MIMETYPE,\n                            ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)\n                    .withValue(\n                            ContactsContract.CommonDataKinds.Phone.NUMBER,\n                            contacts.get(i).getFax())\n                    .withValue(\n                            ContactsContract.CommonDataKinds.Phone.TYPE,\n                            ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK)\n                    .build());\n\n            \/\/ ------------------------------------------------------ Email\n\n            ops.add(ContentProviderOperation\n                    .newInsert(ContactsContract.Data.CONTENT_URI)\n                    .withValueBackReference(\n                            ContactsContract.Data.RAW_CONTACT_ID, i)\n                    .withValue(\n                            ContactsContract.Data.MIMETYPE,\n                            ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)\n                    .withValue(ContactsContract.CommonDataKinds.Email.DATA,\n                            contacts.get(i).getEmail())\n                    .withValue(\n                            ContactsContract.CommonDataKinds.Email.TYPE,\n                            ContactsContract.CommonDataKinds.Email.TYPE_WORK)\n                    .build());\n\n            \/\/ ------------------------------------------------------\n            \/\/ Organisation\n\n            ops.add(ContentProviderOperation\n                    .newInsert(ContactsContract.Data.CONTENT_URI)\n                    .withValueBackReference(\n                            ContactsContract.Data.RAW_CONTACT_ID, i)\n                    .withValue(\n                            ContactsContract.Data.MIMETYPE,\n                            ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)\n                    .withValue(\n                            ContactsContract.CommonDataKinds.Organization.COMPANY,\n                            contacts.get(i).getCompany())\n                    .withValue(\n                            ContactsContract.CommonDataKinds.Organization.TYPE,\n                            ContactsContract.CommonDataKinds.Organization.TYPE_WORK)\n                    .build());\n\n            \/\/ ------------------------------------------------------\n            \/\/ Address              \n\n            ops.add(ContentProviderOperation\n                    .newInsert(ContactsContract.Data.CONTENT_URI)\n                    .withValueBackReference(\n                            ContactsContract.Data.RAW_CONTACT_ID, i)\n                    .withValue(\n                            ContactsContract.Data.MIMETYPE,\n                            ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)\n                    .withValue(\n                            ContactsContract.CommonDataKinds.StructuredPostal.STREET, \n                            contacts.get(i).getStreet())\n                    .withValue(\n                            ContactsContract.CommonDataKinds.StructuredPostal.CITY, \n                            contacts.get(i).getCity())\n                    .withValue(\n                            ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, \n                            contacts.get(i).getPostcode())\n                    .withValue(\n                            ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, \n                            contacts.get(i).getCountry())\n                    .withValue(\n                            ContactsContract.CommonDataKinds.StructuredPostal.TYPE,\n                            ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK)\n                    .build());\n            counter++;\n        }\n\n        try {\n            getContentResolver().applyBatch(ContactsContract.AUTHORITY,\n                    ops);\n        } catch (Exception e) {\n            e.printStackTrace();\n            Toast.makeText(this, \"Error adding contact\", Toast.LENGTH_SHORT).show();\n            counter--;\n        }\n\n        if (counter &gt; 0) {\n            if (counter &gt; 1) {\n                Toast.makeText(this, \"Contacts added\", Toast.LENGTH_SHORT).show();\n            } else {\n                Toast.makeText(this, \"Contact added\", Toast.LENGTH_SHORT).show();\n            }\n        }\n    }\n\n    if (counter == 0) {\n        Toast.makeText(this, \"Unable to add contact\", Toast.LENGTH_SHORT).show();\n    }\n}\n<\/code><\/pre>\n<ol>\n<li>\n<p>After much messing around I have found that I need to loop then fire each time. I cannot simply build up the arraylist and fire once as above. The following code works:<\/p>\n<pre><code>public void onClick(View v) {\nList contacts = GetAddresses();     \nint counter = 0;        \n\nif (!contacts.isEmpty()) {                  \n\n\n    for (int i = 0; i &lt; contacts.size(); i++) {             \nArrayList ops = new ArrayList();\n        ops.add(ContentProviderOperation\n                .newInsert(ContactsContract.RawContacts.CONTENT_URI)\n                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE,\n                        null)\n                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME,\n                        null)\n                .withValue(ContactsContract.RawContacts.AGGREGATION_MODE, \n                        ContactsContract.RawContacts.AGGREGATION_MODE_DISABLED).build());\n\n        \/\/ ------------------------------------------------------ Name\n\n        ops.add(ContentProviderOperation\n                .newInsert(ContactsContract.Data.CONTENT_URI)\n                .withValueBackReference(\n                        ContactsContract.Data.RAW_CONTACT_ID, i)\n                .withValue(\n                        ContactsContract.Data.MIMETYPE,\n                        ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)\n                .withValue(\n                        ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,\n                        contacts.get(i).getName()).build());\n\n        \/\/ ------------------------------------------------------ Work\n        \/\/ Number\n\n        ops.add(ContentProviderOperation\n                .newInsert(ContactsContract.Data.CONTENT_URI)\n                .withValueBackReference(\n                        ContactsContract.Data.RAW_CONTACT_ID, i)\n                .withValue(\n                        ContactsContract.Data.MIMETYPE,\n                        ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)\n                .withValue(\n                        ContactsContract.CommonDataKinds.Phone.NUMBER,\n                        contacts.get(i).getPhone())\n                .withValue(\n                        ContactsContract.CommonDataKinds.Phone.TYPE,\n                        ContactsContract.CommonDataKinds.Phone.TYPE_WORK)\n                .build());\n\n        \/\/ ------------------------------------------------------ Fax\n        \/\/ Number\n\n        ops.add(ContentProviderOperation\n                .newInsert(ContactsContract.Data.CONTENT_URI)\n                .withValueBackReference(\n                        ContactsContract.Data.RAW_CONTACT_ID, i)\n                .withValue(\n                        ContactsContract.Data.MIMETYPE,\n                        ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)\n                .withValue(\n                        ContactsContract.CommonDataKinds.Phone.NUMBER,\n                        contacts.get(i).getFax())\n                .withValue(\n                        ContactsContract.CommonDataKinds.Phone.TYPE,\n                        ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK)\n                .build());\n\n        \/\/ ------------------------------------------------------ Email\n\n        ops.add(ContentProviderOperation\n                .newInsert(ContactsContract.Data.CONTENT_URI)\n                .withValueBackReference(\n                        ContactsContract.Data.RAW_CONTACT_ID, i)\n                .withValue(\n                        ContactsContract.Data.MIMETYPE,\n                        ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)\n                .withValue(ContactsContract.CommonDataKinds.Email.DATA,\n                        contacts.get(i).getEmail())\n                .withValue(\n                        ContactsContract.CommonDataKinds.Email.TYPE,\n                        ContactsContract.CommonDataKinds.Email.TYPE_WORK)\n                .build());\n\n        \/\/ ------------------------------------------------------\n        \/\/ Organisation\n\n        ops.add(ContentProviderOperation\n                .newInsert(ContactsContract.Data.CONTENT_URI)\n                .withValueBackReference(\n                        ContactsContract.Data.RAW_CONTACT_ID, i)\n                .withValue(\n                        ContactsContract.Data.MIMETYPE,\n                        ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)\n                .withValue(\n                        ContactsContract.CommonDataKinds.Organization.COMPANY,\n                        contacts.get(i).getCompany())\n                .withValue(\n                        ContactsContract.CommonDataKinds.Organization.TYPE,\n                        ContactsContract.CommonDataKinds.Organization.TYPE_WORK)\n                .build());\n\n        \/\/ ------------------------------------------------------\n        \/\/ Address              \n\n        ops.add(ContentProviderOperation\n                .newInsert(ContactsContract.Data.CONTENT_URI)\n                .withValueBackReference(\n                        ContactsContract.Data.RAW_CONTACT_ID, i)\n                .withValue(\n                        ContactsContract.Data.MIMETYPE,\n                        ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)\n                .withValue(\n                        ContactsContract.CommonDataKinds.StructuredPostal.STREET, \n                        contacts.get(i).getStreet())\n                .withValue(\n                        ContactsContract.CommonDataKinds.StructuredPostal.CITY, \n                        contacts.get(i).getCity())\n                .withValue(\n                        ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, \n                        contacts.get(i).getPostcode())\n                .withValue(\n                        ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, \n                        contacts.get(i).getCountry())\n                .withValue(\n                        ContactsContract.CommonDataKinds.StructuredPostal.TYPE,\n                        ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK)\n                .build());\n\n    try {\n        getContentResolver().applyBatch(ContactsContract.AUTHORITY,\n                ops);\ncounter++;\n    } catch (Exception e) {\n        e.printStackTrace();\n        Toast.makeText(this, \"Error adding contact\", Toast.LENGTH_SHORT).show();\n        counter--;\n    }\n    }\n\n\n\n    if (counter &gt; 0) {\n        if (counter &gt; 1) {\n            Toast.makeText(this, \"Contacts added\", Toast.LENGTH_SHORT).show();\n        } else {\n            Toast.makeText(this, \"Contact added\", Toast.LENGTH_SHORT).show();\n        }\n    }\n}\n\nif (counter == 0) {\n    Toast.makeText(this, \"Unable to add contact\", Toast.LENGTH_SHORT).show();\n}\n<\/code><\/pre>\n<p>}<\/p>\n<\/li>\n<\/ol>\n<p id=\"rop\"><small>Originally posted 2013-12-02 21:02:24. <\/small><\/p>","protected":false},"excerpt":{"rendered":"<p>I am trying to add multiple contacts from my application. I am reading in data from an xml file and then wrapping this up into a list of strongly typed objects. These objects and then looped through and I am calling an insert into the users contacts for each one. However I am getting some [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1864","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/1864","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/comments?post=1864"}],"version-history":[{"count":0,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/1864\/revisions"}],"wp:attachment":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/media?parent=1864"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/categories?post=1864"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/tags?post=1864"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}