Отображение фотографии контакта по photo_ID

Я позволяю пользователю выбрать контакт в моем приложении и отображаю его в виджете главного экрана, но фотография не отображается, и я не вижуне знаю чтоS не так.

Вот так я получаю ссылку на фото:

...
Cursor c = null;
try {
    c = getContentResolver().query(uri, new String[] {
            ContactsContract.CommonDataKinds.Phone.NUMBER,
            ContactsContract.CommonDataKinds.Phone.TYPE,
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Phone.PHOTO_ID },
            null, null, null);

    if (c != null && c.moveToFirst()) {
        String number = c.getString(0);
        int type = c.getInt(1);
        String name = c.getString(2);
        int photo = c.getInt(3);
        showSelectedNumber(type, number, name, photo);
    }
}

Вот как я это отображаю:

public void showSelectedNumber(int type, String number, String name, int photo) {
    mAppWidgetPrefix.setText(name);
    pickedNumber.setText(number);
    pickedPhoto.setImageResource(photo);
}

Почему нетэто работает?

 keybee23 окт. 2012 г., 09:57
нет ошибок. фото просто не отображается. ничего не отображается.
 Juned23 окт. 2012 г., 09:35
 ariefbayu23 окт. 2012 г., 09:15
почему нет журналов ошибок?
 keybee28 окт. 2012 г., 13:22
до сих пор не знаю?

Ответы на вопрос(1)

Решение Вопроса

ContactsContract.Data таблица как идентификатор ресурса в вашImageView, И, конечно, это нет работа. Это недаже не имеет никакого смысла.

Сначала вы должны получить исходную фотографию из базы данных, и только потом вы сможете ее показать.

Например, вы можете использовать этот код для получения растрового изображения с помощью идентификатора строки, указывающего на данные изображения (i 'мы воссоздали некоторые фрагменты кода только для его проверки):

private void queryContactInfo(int rawContactId) {
    Cursor c = getContentResolver().query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            new String[] {
                    ContactsContract.CommonDataKinds.Phone.NUMBER,
                    ContactsContract.CommonDataKinds.Phone.TYPE,
                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                    ContactsContract.CommonDataKinds.Phone.PHOTO_ID
            }, ContactsContract.Data.RAW_CONTACT_ID + "=?", new String[] { Integer.toString(rawContactId) }, null);
    if (c != null) {
        if (c.moveToFirst()) {
            String number = c.getString(0);
            int type = c.getInt(1);
            String name = c.getString(2);
            int photoId = c.getInt(3);
            Bitmap bitmap = queryContactImage(photoId);
            showSelectedNumber(type, number, name, bitmap);
        }
        c.close();
    }
}

private Bitmap queryContactImage(int imageDataRow) {
    Cursor c = getContentResolver().query(ContactsContract.Data.CONTENT_URI, new String[] {
        ContactsContract.CommonDataKinds.Photo.PHOTO
    }, ContactsContract.Data._ID + "=?", new String[] {
        Integer.toString(imageDataRow)
    }, null);
    byte[] imageBytes = null;
    if (c != null) {
        if (c.moveToFirst()) {
            imageBytes = c.getBlob(0);
        }
        c.close();
    }

    if (imageBytes != null) {
        return BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length); 
    } else {
        return null;
    }
}

public void showSelectedNumber(int type, String number, String name, Bitmap bitmap) {
    mInfoView.setText(type + " " + number + " " + name);
    mImageView.setImageBitmap(bitmap); // null-safe
}

Вы также можете увидетьhttp://developer.android.com/reference/android/provider/ContactsContract.Contacts.Photo.html как удобный каталог провайдеров для получения контактов фото. Также есть пример.

Ваш ответ на вопрос