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