2010-11-14 9 views
0

Je vais avoir un touble BIG lors de l'ajout des champs de contact en double dans Android 2.1 mise à jour 1Android ne pas ajouter tous les contacts avec des champs en double

s'il vous plaît jeter un oeil à mon code:

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

    op_list.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
     .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
     .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 
     .build()); 

    // first and last names 
     op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
    .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
     .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
     .withValue(StructuredName.GIVEN_NAME, "MyFirstName") 
     .withValue(StructuredName.FAMILY_NAME, "MyLastName") 
     .build()); 

    try{ 
    ContentProviderResult[] results = cResolver.applyBatch(ContactsContract.AUTHORITY, op_list); 
    }catch(Exception e){ 
    e.printStackTrace(); 
    } 

Essayez d'exécuter ce morceau de code dans une boucle de 20 itérations, puis allez à l'application de contacts vous verrez seulement 8 contacts qui y sont accrochés !! Ce problème se produit également lorsque j'insère des e-mails, des téléphones et des organisations en double. Essayez-le dans une boucle de 0 à> 200, android deviendra fou!

Y at-il un problème dans mon code? Y a-t-il une solution à cela?

toute aide sera vraiment appréciée ... Merci!

Répondre

9

Après 2 jours non du sommeil ... relectures mon code et ré-écriture de mes cours j'ai trouvé la solution à ceci: il y a une colonne que je ne connaissais pas, et il n'existait même pas dans les API antérieures appelées: AGGREGATION_MODE

donc la solution s'est avérée être la suivante:

ArrayList<ContentProviderOperation> op_list = new ArrayList<ContentProviderOperation>(); 
     op_list.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
      .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
      .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 
      .withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DISABLED) 

      .build()); 

     // first and last names 
      op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
     .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
      .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
      .withValue(StructuredName.GIVEN_NAME, "MyFirstName") 
      .withValue(StructuredName.FAMILY_NAME, "MyLastName") 
      .build()); 

     try{ 
     ContentProviderResult[] results = cResolver.applyBatch(ContactsContract.AUTHORITY, op_list); 
     }catch(Exception e){ 
     e.printStackTrace(); 
     } 
+0

merci !!!! enfin les contacts ajoutés dans le carnet d'adresses! – Ads

+0

.... ur bienvenue :) – Shatazone

+0

Vous êtes mon héros !!!. Un autre, exemple classique de documentation vraiment pauvre sur Android ... bha! Merci encore. –

0

Vous devriez essayer avec insertion directe avec un ContentResolver, il serait peut-être aider (je ne l'ai pas essayé d'insérer 20 fois le même contact, donc je ne sais pas si cela fera une différence)

+0

ill essayer maintenant ... – Shatazone

+0

ok ... il n'a pas fonctionné ... même résultat – Shatazone

+0

étrange ... expliquer ceci: lorsque vous essayez avec les années 20 et vous obtenez votre 8, si vous exécutez à nouveau l'application peut vous ajoutez encore quelques enregistrements ou non? – apps

1

Les contacts sont fusionnés dans une nouvelle API (sdk> 2.0).

Tous les contacts qui tombent dans un ensemble spécifique de règles sont automatiquement fusionnés pour afficher un seul contact dans la liste de contacts.

L'ensemble de règles comprend 1. Contacts ayant les mêmes prénom et nom. 2. Contacts ayant le même ID de courrier. 3. Contact ayant un nom et un numéro de téléphone correspondant ... etc.

Dans l'écran Détails du contact d'affichage, les doublons ne sont pas visibles. Si vous essayez de modifier le contact, vous trouverez toutes les instances du contact que vous avez entré. (c'est-à-dire si un contact est entré 10 fois puis 10 instances différentes sont visibles l'une après l'autre.) Vous pouvez éditer n'importe quel contact particulier là-bas.

Comme Android 2.0 prend en charge plusieurs comptes, ce scénario existe.