2010-09-03 17 views
1

Hélas, j'ai environ 500 contacts dans mon répertoire et pour une raison quelconque, après les avoir synchronisés avec thunderbird, le nom de l'affichage est aléatoire, le premier ... le premier en dernier. Alors j'ai pensé que je mettrais un widget rapide ensemble juste pour refaire tous mes noms d'affichage pour durer, d'abord. Le code que j'utilise est ci-dessous, mais je ne reçois pas les valeurs last/first. Les clés du curseur existent (données1, données2), mais les valeurs étaient "1" et null respectivement. Des idées?accès aux données de contact

Cursor cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, null, null, null); 

     while (cursor.moveToNext() != false) { 

     String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 

     String fname = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME)); 

     String lname = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME)); 

     if (lname != null && lname.length() > 0) { 

       String sDName = lname + "," + fname; 

       ContentValues values = new ContentValues(); 

       values.put(ContactsContract.Contacts.DISPLAY_NAME, sDName); 

       getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Contacts._ID+"=", new String[] {id}); 

     } 

     } 

Répondre

0

ContactsContract.Data contient tous les différents types d'informations comme l'adresse postale, numéros de téléphone, e-mail, sites Web, etc. photes dans une table partagée.

Vous avez pour filtrer les lignes qui contiennent les informations que vous êtes intéressé par

Dans la requête, ajouter une clause WHERE.

query(ContactsContract.Data.CONTENT_URI, Data.MIMETYPE + "=?", 
    new String[]{StructuredName.CONTENT_ITEM_TYPE}, null, null); 

Voir la documentation ContactsContract.Data

+0

Excelent cette m'a eu où je devais aller. – user438431