2011-12-15 2 views

Répondre

0

Si vous ne l'avez pas résolu encore voilà comment je le fais. En aucun cas je ne suggère que c'est une solution efficace. C'est juste la solution directe.

Recherchez d'abord tous les ID de contact ayant un ID de groupe spécifique. Puis créer un ContentProviderOperation pour chaque contact à supprimer et appliquer la dernière liste d'opérations de suppression.

private void deletaAllInGroup(Context context, long groupId) 
    throws RemoteException, OperationApplicationException{ 
    String where = String.format("%s = ?", GroupMembership.GROUP_ROW_ID); 
    String[] whereParmas = new String[] {Long.toString(groupId)}; 
    String[] colSelection = new String[] {Data.CONTACT_ID}; 

    Cursor cursor = context.getContentResolver().query(
      Data.CONTENT_URI, 
      colSelection, 
      where, 
      whereParmas, 
      null); 

    ArrayList<ContentProviderOperation> operations = 
     new ArrayList<ContentProviderOperation>(); 

    // iterate over all contacts having groupId 
    // and add them to the list to be deleted 
    while(cursor.moveToNext()){ 
     String where = String.format("%s = ?", RawContacts.CONTACT_ID); 
     String[] whereParams = new String[]{Long.toString(cursor.getLong(0))}; 

     operations.add(ContentProviderOperation.newDelete(RawContacts.CONTENT_URI) 
     .withSelection(where, whereParams) 
     .build()); 
    } 

    context.getContentResolver().applyBatch(
     ContactsContract.AUTHORITY, operations); 
} 
0

Suppression d'un enregistrement

Pour supprimer un seul enregistrement, appel {ContentResolver.delete() avec l'URI d'une ligne spécifique.

Pour supprimer plusieurs lignes, appelez le ContentResolver.delete() avec l'URI du type d'enregistrement à supprimer (par exemple, android.provider.Contacts.People.CONTENT_URI) et une clause SQL WHERE définissant les lignes à supprimer. (Attention: assurez-vous d'inclure une clause WHERE valide si vous supprimez un type général ou si vous risquez de supprimer plus d'enregistrements que vous n'en aviez l'intention!).

Be careful with deleting Contacts! Deleting an aggregate contact deletes all constituent raw contacts. The corresponding sync adapters will notice the deletions of their respective raw contacts and remove them from their back end storage. 

Specify READ_CONTACTS and WRITE_CONTACTS permissions in your AndroidManifest.xml. 

par chaque contact Itérer et supprimer chaque enregistrement: Content Providers

Contacts

+0

Ok, mais mon problème est de trouver le bon contact et je ne trouve pas un champ qui me dit que le contact est dans un groupe déterminé. Pour ce que j'ai vu je dois regarder la table de groupe et obtenir l'id des personnes dedans mais j'échoue dedans: D ainsi ... comment est-ce que je fais correspondre la table 2? est-il un moyen de les rejoindre ?? ty – Andrea

0
private final String MY_QUERY = "SELECT * FROM table_a a INNER JOIN table_b b ON a.id=b.other_id WHERE b.property_id=?"; 

db.rawQuery(MY_QUERY, new String[]{String.valueOf(propertyId)}); 

rawQuery

un autre exemple où je me joins à deux tables dans une requête

private static final String JOIN_QUERY= 
"SELECT * FROM Employee JOIN User ON userId = employeeUserId"; 
+0

Alors ... quel champ les assortit? J'ai vu que ContactsContrat a beaucoup de sous-table et je suppose que toute la table a une clé qui correspond à un contact, mais je ne comprends pas ... la première table est SELECT * FROM view_groups et la seconde est SELECT * FROM view_raw_contacts_restricted WHERE (1) ... où puis-je obtenir le contact? >. <" – Andrea

Questions connexes