IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Mettre à jour un contact


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Par défaut Mettre à jour un contact
    Bonjour!

    J'ai un problème avec la mise à jour de contact sous Android 2.2.
    En gros, l'application passe par tous les contacts du téléphone, vérifie si le contact a un numéro, si c'est le cas, on le met à jour avec des infos d'une bdd externe en fonction du numéro de téléphone.

    La récupération de tous les contacts, avec le numéro, et la récolte d'infos en fonction de ce dernier fonctionne bien, mais la mise à jour du contact ne marche pas. A la place de ce que je veux faire (à savoir mettre à jour les champs Nom, prénom, entreprise), c'est le numéro de téléphone qui est modifié par ces valeurs là!

    J'utilise ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
     
    //Récupération de tous les contacts du téléphone
    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    if(cur.getCount() > 0)
    {
       while(cur.moveToNext())
      {
       if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
      {
    	Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
    null, 
    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
    new String[]{cur.getString(
    cur.getColumnIndex(ContactsContract.Contacts._ID))}, null);
     
    //Récupération de l'id du contact pour la mise à jour
    String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
    //Pour chaque numéro du contact
    while (pCur.moveToNext())
    {
    	//Récupération du numéro
    	String numero = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
     
    	/*
    	ici on va chercher les informations en fonction du numéro, j'ai supprimé cette partie qui fonctionne parfaitement		
    	*/						    			
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
     
     
    ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
    .withSelection(ContactsContract.CommonDataKinds.StructuredName.CONTACT_ID + "=?", new String[]{id})
    .withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, nom)
    .withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, contact.getPrenom())
    .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, nomComplet)
    .build()
    );
    ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
    withSelection(ContactsContract.CommonDataKinds.Organization.CONTACT_ID + "=?", new String[]{id})
    .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, contact.getRaisonSociale())
    .build()
    );
    try
    {
    getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
    }
    catch(Exception ex)
    {
    ex.printStackTrace();
    }
     
    }
    }
    Quand j'éxecute ce code là, le contact est mis à jour mais c'est le numéro de téléphone qui prend la valeur de getRaisonSociale().
    Si je commente le deuxième ops.add(), le numéro de téléphone du contact prend la valeur nomComplet...

    Je ne comprends pas ce qui cloche avec ces requêtes...

    Merci d'avance, n'hésitez pas à poser des questions car je ne pense pas avoir été très clair

  2. #2
    Membre éclairé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Par défaut
    J'ai effectué quelque tests, et il se passe des choses étrange.
    Je ne dois pas effecteur le newUpdate comme il faut.

    J'ai essayé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ops.add(ContentProviderOperation. newUpdate(ContactsContract.Data.CONTENT_URI)
    .withSelection(ContactsContract.CommonDataKinds.StructuredName.CONTACT_ID + "=?", new String[]{id})							    						
    .withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, nom)
    .withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, contact.getPrenom())
    .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, nomComplet)
    							    						.build()
    							    						);
    Si le nom et le prénom ne sont pas vides, ils sont biens mis à jour, mais le numéro de téléphone est également remplacé par le nomComplet....

    Je ne comprends absolument pas comment fonctionne cet update...

  3. #3
    Membre éclairé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Par défaut
    Rere comportement étrange...(C'est pas que j'aime monologuer mais bon )

    Lorsque je modifie QUE le nom et le prénom, cela fonctionne si l'un des deux n'est pas vide à la base, sinon ça ne fonctionne pas.Par contre il passe mes numéros de téléphone en "Inconnu", et non plus en domicile ou portable.

    Personne ne peux m'aider, ou me donner une piste?
    Je n'arrive vraiment pas à saisir ce qui peut provoquer un tel comportement...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    ops.add(ContentProviderOperation. newUpdate(ContactsContract.Data.CONTENT_URI)
    .withSelection(ContactsContract.CommonDataKinds.StructuredName.CONTACT_ID + "=?", new String[]{id})							    						
    .withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, nom)
    .withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, contact.getPrenom())
    .build()

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut.
    J'ai l'impression que l'update update toutes les données du contact et que celle qui ne sont pas données auront une valeur par défaut.
    Essaie en redonnant toutes les info.

  5. #5
    Membre éclairé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Par défaut
    Merci de te pencher sur mon problème yan, mais je doute que ce soit ça, et le lien que j'ai trouvé me conforte dans l'idée que je m'y prends mal :

    http://www.listware.net/201004/andro...tacts-api.html

    Par contre, j'ai du mal à cerner comment réaliser ce que le dernier intervenant décrit à savoir récupérer la ligne correspondant au type StructruedName.CONTENT-TYPE, et la mettre à jour...:

    The data structure for contacts is based on three separate tables:
    Contacts, RawContacts and Data. A Contact can have multiple RawContacts,
    which can have multiple Data rows. Each data row has a mime type that
    specifies what kind of data is stored in that row. Contact name is stored
    in a row with the mime type StructuredName.CONTENT-TYPE.
    So, in order to change the contact name you first need to find the Data row
    that contains the name and then update that Data row. The provider will
    take care of the rest (e.g. promoting the name to the level of RawContact
    and then Contact).
    I hope this helps,
    - Dmitri
    So, in order to change the contact name you first need to find the Data row that contains the name and then update that Data row.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    J'ai trouvé cela mais j'ai pas tout compris :
    http://stackoverflow.com/questions/2...ils-on-android

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/03/2015, 14h22
  2. [OL-2007] Mettre à jour des éléments dans un contact
    Par gambi dans le forum Outlook
    Réponses: 0
    Dernier message: 12/01/2013, 13h14
  3. [OL-2010] Mettre à jour les contacts outlook par access
    Par Marc31 dans le forum Outlook
    Réponses: 0
    Dernier message: 08/09/2011, 12h46
  4. Réponses: 3
    Dernier message: 09/07/2004, 10h23
  5. Réponses: 6
    Dernier message: 14/02/2003, 16h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo