Почему мои фотографии контактов не отображаются в списке?

ВАЖНО ОБРАТИТЕ ВНИМАНИЕ, ЧТО API IM, РАБОТАЮЩИЙ С ЯЗЫКОМ 2.3.

У меня есть список, который в настоящее время заполнен контактами (в настоящее время 6), которые отправили мне текстовые сообщения в папке входящих сообщений моего устройства. После того, как все контакты собраны и переданы в ArrayList<String>, ArrayList передается в конструктор для моего класса CustomAdapter. Оттуда это код, который заполняет мой список контактами из моего почтового ящика из моего getView() метода:

holder.photo = (ImageView) rowView.findViewById(R.id.iv_contactPic);
holder.contact = (TextView) rowView
                .findViewById(R.id.contactEntryText);

String folder = "content://sms/inbox/";
        Uri mSmsQueryUri = Uri.parse(folder);
        contactID = new ArrayList<String>();

        try {
            c = context.getContentResolver().query(mSmsQueryUri,
                    new String[] { "_id", "address", "date", "body" },
                    null, null, null);
            if (c == null) {
                Log.i(TAG, "cursor is null. uri: " + mSmsQueryUri);
            }

                c.moveToFirst();
                while (c.moveToNext()) {

                cid = c.getString(0);
                contactID.add(cid); // stores contact IDs
            }

        } catch (Exception e) {
            //Log.e(TAG, e.getMessage());
        } finally {
            c.close();
        }

if(holder != null){
    holder.contact.setText(data.get(position)); // displays contact by name

    //Contact photo not showing
    holder.photo.setImageBitmap(getByteContactPhoto(contactID.get(position));
}

Из приведенного выше кода holder.contact без проблем отображает 6 контактов. Но проблема в holder.photo, который вообще ничего не отображает. Вот способ получения фотографий:

public Bitmap getByteContactPhoto(String contactId) {
    Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, Long.parseLong(contactId));
    Uri photoUri = Uri.withAppendedPath(contactUri, Contacts.Photo.CONTENT_DIRECTORY);
    Cursor cursor = context.getContentResolver().query(photoUri,
                    new String[] {Contacts.Photo.DATA15}, null, null, null);
    if (cursor == null) {
        return null;
    }
    try {
                cursor.moveToFirst();
        if (cursor.moveToNext()) {
            byte[] data = cursor.getBlob(0);
            if (data != null) {
                return BitmapFactory.decodeStream( new ByteArrayInputStream(data));
            }
        }
    } finally {
        cursor.close();
    }
    return null;
    }

Но в LogCat это единственное, что отображается применительно к фотографиям:

W/Resources(15031): Converting to string: TypedValue{t=0x12/d=0x0 a=3 r=0x7f080015}
W/Resources(15031): Converting to string: TypedValue{t=0x12/d=0x0 a=3 r=0x7f080015}
W/Resources(15031): Converting to string: TypedValue{t=0x12/d=0x0 a=3 r=0x7f080015}
W/Resources(15031): Converting to string: TypedValue{t=0x12/d=0x0 a=3 r=0x7f080015}
W/Resources(15031): Converting to string: TypedValue{t=0x12/d=0x0 a=3 r=0x7f080015}
W/Resources(15031): Converting to string: TypedValue{t=0x12/d=0x0 a=3 r=0x7f080015}

Есть идеи, как исправить это, чтобы отображались фотографии контактов?


person Community    schedule 14.06.2012    source источник
comment
Вы уверены, что содержимое data является изображением в виде массива ByteArray?   -  person Graeme    schedule 14.06.2012
comment
@Graeme data используется только для отображения имени контакта в TextView. contactID.get(position) возвращает номер идентификатора, затем разбирается в длинный.   -  person    schedule 14.06.2012
comment
Извините, это data: BitmapFactory.decodeStream( new ByteArrayInputStream(data))   -  person Graeme    schedule 14.06.2012
comment
Полученный вами _id не является Contact_id. Это thread_id каждого сообщения, которое у вас было во входящих. Поскольку я предложил вам другой вопрос, правильный способ - найти Contact, совпадающий с address. Так и поступил встроенный почтовый ящик.   -  person Trung Nguyen    schedule 01.09.2012