我正在尝试从我的应用程序中添加多个联系人。我正在从 xml 文件中读取数据,然后将其包装到强类型对象列表中。这些对象然后循环遍历,我为每个对象调用插入到用户联系人中。
但是,在测试我得到 1 个或两个工作联系人,然后是一些空的(未知)条目时,我得到了一些非常奇怪的结果。(未知数)上的成功条目数似乎是随机的,但我不知道为什么我不能执行应该相当简单的事情。
下面是我的点击事件,它启动了获取数据然后将其添加到联系人的命令。我可以确认每次都将数据读入联系人列表,因此数据没有问题。
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();
}
}