1

J'ai ce code pour supprimer un groupe de contactproblème en utilisant Groupe de contact supprimer sur Android

public void delete(Activity act,String[] args) { 
     try { 
      int b=act.getContentResolver().delete(ContactsContract.Groups.CONTENT_URI,"_ID=?", args); 

      Toast.makeText(act, "Deleted",Toast.LENGTH_SHORT).show(); 


      //notify registered observers that a row was updated 
      act.getContentResolver().notifyChange(ContactsContract.Groups.CONTENT_URI, null); 

     } catch (Exception e) { 
      Log.v(TAG, e.getMessage(), e); 
      Toast.makeText(act, TAG + " Delete Failed",Toast.LENGTH_LONG).show(); 
     } 
    } 

j'appelle la méthode comme

private void processDelete(long rowId) { 
     String[] args = { String.valueOf(rowId) }; 

     objItem.delete(this, args); 
     cur.requery(); 
    } 

Je

<uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission> 

L'ID est passé ok.

La valeur b renvoie 1, mais la suppression n'est pas effectuée. Au redémarrage de l'activité, je vois toujours l'enregistrement dans la liste. Qu'est-ce que je fais mal?

Répondre

1

Il était mon manque:

Lorsque quering les enregistrements existants que je devais ajouter une clause where pour indiquer que je ne veux pas deleted=1 les valeurs, les valeurs sont pas supprimer instantanément, ils sont marqués comme supprimés.

Cursor managedCursor = act.managedQuery(contacts, projection, 
       ContactsContract.Groups.DELETED + "=0", 
       null, 
       ContactsContract.Groups.TITLE + " ASC"); 
     return managedCursor; 
+0

i peut supprimer définitivement un groupe à partir du périphérique où plus tard « ContactsContract.Groups.DELETED + « = 0 », » la vérification n'est pas nécessaire? –

2

Vous n'avez pas besoin d'ajouter where clause disant cela. Si vous ne voulez pas supprimer instantanément les éléments de la base de données et ne pas les marquer comme supprimés, ajoutez cette ligne à votre URI.

mUri.buildUpon().appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER,"1").build(); 
//and then call your delete function with URI appended like this. 
mResolver.delete(mUri,null, null); 

cet indicateur: CALLER_IS_SYNCADAPTER défini sur 1 supprime la ligne instantanément.

J'espère que cela a aidé.

+0

Oui, ça l'emporte sur la réponse de Pentium10. – sjngm

1

vous pouvez supprimer le groupe de contact en utilisant ce

private void deletaAllInGroup(Context context, long groupId) 
      throws RemoteException, OperationApplicationException{ 
    ContentValues values = new ContentValues();   
    values.put(ContactsContract.Groups._ID, groupId); 
    getContentResolver().delete(ContactsContract.Groups.CONTENT_URI,values.toString(),null); 
     }