Récupération d'un numéro de téléphone avec ContactsContract dans Android ne fonctionne pas

J'ai écrit la fonction suivante afin de récupérer un numéro de téléphone unique qui appartient au contact avec l'id "contactID".

La fonction qui est de récupérer le numéro de téléphone:

private String getContactPhone(String contactID) {
    Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
    String[] projection = null;
    String where = ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?";
    String[] selectionArgs = new String[] { contactID };
    String sortOrder = null;
    Cursor result = managedQuery(uri, projection, where, selectionArgs, sortOrder);
    if (result.moveToFirst()) {
        String phone = result.getString(result.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        if (phone == null) {
            result.close();
            return null;
        }
        result.close();
        return phone;
    }
    result.close();
    return null;
}

Comment cette fonction est appelée:

ArrayList<Contact> resultContacts = new ArrayList<Contact>();
Cursor result = null;
Uri uri = ContactsContract.Data.CONTENT_URI;
String[] projection = new String[] {
        ContactsContract.Contacts._ID,
        ContactsContract.Contacts.DISPLAY_NAME,
        ContactsContract.CommonDataKinds.Event.CONTACT_ID,
        ContactsContract.CommonDataKinds.Event.START_DATE,
};
String where = ContactsContract.Data.MIMETYPE+" = ? AND "+ContactsContract.CommonDataKinds.Event.TYPE+" = "+ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY;
String[] selectionArgs = new String[] {ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE};
String sortOrder = null;
result = managedQuery(uri, projection, where, selectionArgs, sortOrder);
while (result.moveToNext()) {
    Long id = result.getLong(result.getColumnIndex(ContactsContract.Contacts._ID));
    String phone = getContactPhone(String.valueOf(id));
    ...
}
...

Malheureusement, il ne fonctionne pas. Je reçois null si j'appelle cette fonction avec la valeur que j'ai reçu de "ContactsContract.Les Contacts._ID". Pourquoi est-ce donc? Quel est le problème?

Edit: j'ai utilisé de la carte des Contacts._ID à CommonDataKinds.Téléphone.CONTACT_ID - qui n'a pas fonctionné. Mais maintenant j'ai la carte de Contacts.DISPLAY_NAME à CommonDataKinds.Téléphone.DISPLAY_NAME et il fonctionne tout à coup - étrange, n'est-ce pas? Mais je voudrais plutôt la carte de l'Id au lieu de l'affichage des noms. Donc, la question est toujours d'actualité. Cela pourrait-il être dû à différents IDs dans ces tableaux? N'est-ce pas pourquoi il y a recherche des Id?

Avez-vous vérifié que vous obtenez seulement d'un contact?
Oui, comme je l'ai essayer d'obtenir le numéro de téléphone pour chaque contact lors de l'itération à travers le curseur résultant de la première requête. Et si j'ai eu deux contacts, cela ne fonctionnerait pas avec le nom d'affichage, soit, serait-il?
Est-il possible que vous pourriez montrer combien vous obtenez le contactId donc je pourrais être en mesure d'essayer ce mon auto?
Bien sûr, je peux. J'ai ajouté des détails à la question ci-dessus. Je vous remercie pour vos efforts!

OriginalL'auteur caw | 2012-01-04