Получить контактную информацию из контактного идентификатора в Android - PullRequest
4 голосов
/ 28 января 2012

Я хочу получить несколько контактных данных из списка контактов. У меня есть этот код:

list.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long id) {
        //HERE I WANT TO GET CONTACT DETAILS FROM THE ID PARAMETER

        Uri lookupUri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, Uri.encode(id));
        Cursor c = getContentResolver().query(lookupUri, new String[]{Contacts.DISPLAY_NAME}, null,null,null);
        try {
              c.moveToFirst();
              String displayName = c.getString(0);
        } finally {
              c.close();
        }

}

Но я получаю это исключение: IllegalArgumentException, Invalid lookup id (когда я вызываю метод запроса из курсора). Поэтому я не знаю, как получить действительный идентификатор поиска из списка элементов.

Есть идеи? спасибо!

Ответы [ 3 ]

10 голосов
/ 28 января 2012

Здесь id означает, A contact id, для которого вы хотите получить контактную информацию,

Простой код для получения номера телефона для определенного contact id подобен

                    // Build the Uri to query to table
                    Uri myPhoneUri = Uri.withAppendedPath(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, id);

                    // Query the table
                    Cursor phoneCursor = managedQuery(
                            myPhoneUri, null, null, null, null);

                    // Get the phone numbers from the contact
                    for (phoneCursor.moveToFirst(); !phoneCursor.isAfterLast(); phoneCursor.moveToNext()) {

                        // Get a phone number
                        String phoneNumber = phoneCursor.getString(phoneCursor
                                .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));

                        sb.append("Phone: " + phoneNumber + "\n");
                    }
                }

Итак, из вашего вопроса я должен усомниться в параметре id, который вы поете в своем URI, просто ясно, что, также в моем примере идентификатор является строковым типом ...

Надеюсь, вы поймете это.

Обновление: Uri.encode(id) вместо простой передачи id в формате строки .

Спасибо ..

3 голосов
/ 16 июля 2012

Поскольку managedQuery устарело, вы также можете использовать

Cursor phoneCursor = getContentResolver().query(myPhoneUri, null, null, null, null);
0 голосов
/ 26 апреля 2015
Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
int columnIndex = arg2.getColumnIndex(ContactsContract.Contacts._ID);

private void retriveContactImage(ImageView imageView, int columnIndex) {
    Bitmap photo = null;
    try {
        InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(),
                ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.valueOf(columnIndex)));
        if (inputStream != null) {
            photo = BitmapFactory.decodeStream(inputStream);
            inputStream.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    imageView.setImageBitmap(photo);
}

private ArrayList<String> retrieveContactNumbers(TextView textView, long contactId) {
    ArrayList<String> phoneNum = new ArrayList<String>();
    Cursor cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { contactId + "" }, null);
    if (cursor.getCount() >= 1) {
        while (cursor.moveToNext()) {
            // store the numbers in an array
            String str = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            if (str != null && str.trim().length() > 0) {
                phoneNum.add(str);
            }
        }
    }
    cursor.close();
    textView.setText(phoneNum.get(0));
    return phoneNum;
}

private void retrieveContactName(TextView textView, long contactId) {
    String contactName = null;

    Cursor cursor = context.getContentResolver().query(Contacts.CONTENT_URI, new String[] { ContactsContract.Contacts.DISPLAY_NAME },
            ContactsContract.Contacts._ID + " = ?", new String[] { String.valueOf(contactId) }, null);

    if (cursor.moveToFirst()) {
        contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
    }
    cursor.close();
    textView.setText(contactName);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...