Obtener el número del selector de contactos

Estoy tratando de obtener un nombre y número de teléfono de contacto después de que un usuario haya elegido un contacto del Selector de contactos. Estoy tratando de hacer que mi aplicación funcione para SDK v3 y superior, así que creé una clase abstracta que llamaría solo a la API que necesitaba. Ya tengo la clase abstracta funcionando (elige la API correcta) y también tengo la API para SDK v3,4 funcionando. Tengo problemas para que funcione la API más nueva que usa ContactsContract.

Puedo obtener el nombre de un contacto, ¡pero el número que recupera es siempre el número de la ID de contacto ANTES! Ejemplo: Tengo 2 contactos "John Doe" y "Jane Doe" con los números respectivos "555-555-555" y "777-777-7777" agregados en los contactos. John Doe es ID = 1 y Jane Doe es ID = 2. Si intento obtener el número de Jane Doe, obtengo el de John, 555-555-5555. Si intento obtener el de John, no obtengo nada. La comprobación de si (cursor.moveToNext ()) falla.

¿Puedes ayudarme a solucionar esto? Me vuelve loco. He mirado muchos ejemplos y siempre obtengo el mismo error.

Los datos de intención son la intención de datos de onActivityResult

 
import java.util.ArrayList;<p></p>

<p>import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Contacts;</p>

<p>class NewContactsAdapterBridge extends ContactsAdapterBridge {</p>

ArrayList<String> info = new ArrayList<String>();
ArrayList<String> getInfo (Activity a, Intent data) {
    Uri contactData = data.getData();

    Cursor cursor = a.managedQuery(contactData, null, null, null, null);

    if (cursor.moveToFirst()) {
        String id = cursor.getString(
                cursor.getColumnIndex(ContactsContract.Contacts._ID));

        String name = cursor.getString(cursor.getColumnIndexOrThrow
                (ContactsContract.Contacts.DISPLAY_NAME));

        String hasPhoneNumber = cursor.getString(cursor.getColumnIndexOrThrow(
                ContactsContract.Contacts.HAS_PHONE_NUMBER));
        info.add(name);

        if (Integer.parseInt(hasPhoneNumber) > 0) {
            Uri myPhoneUri = Uri.withAppendedPath(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                    id);

            Cursor pCur = a.managedQuery(
                    myPhoneUri, 
            null, 
            null,
            null,
            null);
            if (pCur.moveToNext()) {
            String number = pCur.getString( pCur.getColumnIndex
                    (ContactsContract.CommonDataKinds.Phone.NUMBER));
            info.add(number);
            } 
        }
    }
    return info;
}   
}

Respuestas a la pregunta(5)

Su respuesta a la pregunta