私はAndroidアプリのユニットテストを行っており、連絡先とはたくさん仕事をしています。 Androidのコンテンツプロバイダに連絡先を挿入し、テストを実行した後に連絡先を削除する必要があります。トラブルは、彼らが実際には削除されません、次のとおりです。Android 2.xでの連絡先の削除
挿入:
ArrayList<ContentProviderOperation> contactOps = new ArrayList<ContentProviderOperation>();
int backRefIndex = 0;
Random r = new Random();
contactOps.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
contactOps.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, backRefIndex)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "Sample Name" + r.nextInt())
.build());
contactOps.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, backRefIndex)
.withValue(ContactsContract.CommonDataKinds.Phone.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "020" + r.nextInt())
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, r.nextInt(20)
.build());
try {
ContentProviderResult[] result = context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, contactOps);
} catch (Exception e) {
e.printStackTrace();
}
削除方法1は、(原材料の連絡先の数を返しますが、彼らは実際には削除されません):
int deletedRawContacts = context.getContentResolver().delete(ContactsContract.RawContacts.CONTENT_URI, ContactsContract.RawContacts._ID + " >= ?", new String[]{"0"});
削除方法2(削除方法1と同じ結果ですが、別の方法):
private static int deleteAllRawContacts(Context context) {
ContentResolver cr = context.getContentResolver();
Cursor cur = cr.query(ContactsContract.RawContacts.CONTENT_URI, null, null, null, null);
int count = 0;
while (cur.moveToNext()) {
try {
String contactId = cur.getString(cur.getColumnIndex(ContactsContract.RawContacts._ID));
count += cr.delete(ContactsContract.RawContacts.CONTENT_URI, ContactsContract.RawContacts._ID + " = ?", new String[]{contactId});
} catch (Exception e) {
System.out.println(e.getStackTrace());
}
}
return count;
}
連絡先の削除メソッドは機能しますが、未処理の連絡先の削除メソッドはfalse値を返します。それはすべての連絡先を削除したことを「教えてくれ」ますが、次のテストケースを実行すると古いRaw連絡先が見つかることがあります(挿入された連絡先と現在の連絡先の数が間違っています)。注:すべてのテストはAndroidエミュレータで行われます。
これを解決する方法はありますか?
私は同様の質問をここで見ました:How to delete a contact? - しかし解決策は、与えられた問題を解決するようにも思われません。
L0rdAli3n、あなただけ絶望的な男性を助けるために、いくつかの良いカルマを獲得した:) –
私は、私はちょうど私がこの答えをマークするのを忘れて実現:) –
を助けることができるうれしいです正しいのですか?クリストフハフナーは決して遅くない方が良いですか? – benfwirtz