Sto lavorando a Test di unità per la mia app per Android e sto facendo molto con i Contatti. Devo inserire i contatti nei fornitori di contenuti Android e cancellarli dopo aver eseguito i miei test. Il problema è che non vengano effettivamente cancellati:Eliminazione di contatti (non elaborati) in Android 2.x
inserzione:
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();
}
Metodo di eliminazione 1 (restituisce il numero di contatti prime, ma in realtà non vengono eliminati):
int deletedRawContacts = context.getContentResolver().delete(ContactsContract.RawContacts.CONTENT_URI, ContactsContract.RawContacts._ID + " >= ?", new String[]{"0"});
Metodo di cancellazione 2 (stesso risultato del metodo di cancellazione 1, ma approccio diverso):
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;
}
Il metodo di eliminazione per Contatti funziona, ma il metodo di eliminazione per Contatti non elaborati restituirà un valore falso. Mi "dirà" che ha cancellato tutti i contatti, ma quando eseguo il mio prossimo test case, i vecchi contatti grezzi possono ancora essere trovati (cioè il conteggio dei contatti inseriti rispetto ai contatti presenti è sbagliato). Nota: tutti i test vengono eseguiti sull'emulatore Android.
Qualche idea su come risolvere questo problema?
Ho visto una domanda simile qui: How to delete a contact? - ma la soluzione non sembra risolvere il problema dato neanche.
L0rdAli3n, è appena guadagnato qualche buon karma per aiutare un uomo disperato :) –
Sono contento di aver potuto aiutare :) –
Ho appena realizzato che ho dimenticato di segnare questa risposta corretto - meglio tardi che mai @ChristophHaefner? – benfwirtz