我想從我的應用程序添加多個聯繫人。我正在讀取來自xml文件的數據,然後將其包裝到強類型對象的列表中。這些對象,然後循環,我打電話插入到每個用戶的聯繫人。在Android 2.3.5插入多個聯繫人
但是,我在測試我得到1或2個工作聯繫人,然後是一些空的(未知)條目的同時,我得到了一些非常奇怪的結果。 (Unknowns)上的成功條目似乎是隨機的,但我爲什麼不能執行應該相當簡單的事情而處於失敗狀態。
我的點擊事件啓動命令來獲取數據,然後將其添加到聯繫人是下面。我可以確認每次都將數據讀入聯繫人列表中,因此這不會造成數據問題。
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();
}
}