2010-08-05 7 views
5

Je travaille chez android 2.1 ContactContract, quand je n'avais pas mis de compte (par exemple: compte gmail) à l'émulateur android puis, nouveau contact, mais je n'ai pas pu supprimer ce contact chez DB.Comment supprimer un contact?

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
    String[] args = new String[] {id}; 
    ops.add(ContentProviderOperation.newDelete(Data.CONTENT_URI) 
      .withSelection(Data.CONTACT_ID + "=?", args) 
      .build()); 
    ops.add(ContentProviderOperation.newDelete(RawContacts.CONTENT_URI) 
      .withSelection(RawContacts.CONTACT_ID + "=?", args) 
      .build()); 
    ops.add(ContentProviderOperation.newDelete(Contacts.CONTENT_URI) 
      .withSelection(Contacts._ID + "=?", args) 
      .build()); 

Répondre

11

Supprimer le contact de RawContacts supprime les données à partir des données, table Contacts.

ArrayList ops = new ArrayList(); String[] args = new String[] {id}; 
// if id is raw contact id 
ops.add(ContentProviderOperation.newDelete(RawContacts.CONTENT_URI).withSelection(RawContacts._ID + "=?", args) .build()); 
    OR 
// if id is contact id 
ops.add(ContentProviderOperation.newDelete(RawContacts.CONTENT_URI).withSelection(RawContacts.CONTACT_ID + "=?", args) .build()); 
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
 
+1

Cher Karan, j'ai essayé, bien que cette méthode puisse effacer le contact, elle a aussi quelques problèmes. Les informations des contacts sont enregistrées dans le fichier "contacts2.db", j'ai recherché ce fichier db, le contact est supprimé dans la table "contacts", mais n'est pas effacé dans la table "data", pouvez-vous effacer complètement un contact? – user408273

0

J'utilise ceci pour supprimer un numéro de téléphone d'un contact existant, mais pas le contact lui-même:

ArrayList ops = new ArrayList(); 
    String[] args = new String[]{ 
     ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE, 
     number, 
     Integer.toString(ContactsContract.CommonDataKinds.Phone.TYPE_MAIN), 
     raw_contact_id 
    }; 
    ops.add(
     ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI) 
      .withSelection(ContactsContract.Data.MIMETYPE + "=? AND " 
       + ContactsContract.CommonDataKinds.Phone.NUMBER + "=? AND " 
       + ContactsContract.CommonDataKinds.Phone.TYPE + "=? AND " 
       + ContactsContract.Data.RAW_CONTACT_ID + "=?" 
       , args) 
      .build()); 

    c.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
2
public static boolean fullDeleteContactByRawId(String rawId) 
{ 
    Uri rawUri = RawContacts.CONTENT_URI.buildUpon().appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build(); 
    String where = RawContacts._ID + " = ?"; 
    String[] args = new String[]{rawId}; 

    try 
    { 
     ContentManager.delete(rawUri, where, args); 
    } 
    catch(Exception e) 
    { 
     return false; 
    } 

    return true; 
} 

avis: Après effacement complet, ce contact ne peut pas synchroniser