アプリケーションから複数の連絡先を追加しようとしています。私は xml ファイルからデータを読み込んでおり、これを厳密に型指定されたオブジェクトのリストにまとめています。これらのオブジェクトをループして、それぞれのユーザーの連絡先に挿入を呼び出しています。
ただし、テスト中に非常に奇妙な結果が得られ、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();
}
}