2012-02-13 2 views
0

Я указываю контакты с фотографией, но я не мог показать фотографии контактов. Я получаю фото URI следующим образом:ImageView.setImageURI метод не показан на андроиде

  ContentResolver cr = getContentResolver(); 
//   Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,null, null,null); 
      Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, ContactsContract.Contacts.DISPLAY_NAME + " ASC"); 
      if (cur.getCount() > 0) { 
       while (cur.moveToNext()) { 
        id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
        name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
        photo_id = cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.PHOTO_ID)); 
        Log.e("name", name); 
        Log.e("Photo_id", ""+photo_id); 
        photo = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, photo_id); 
        Log.e("URI", ""+photo); 
        image.setImageURI(photo); // Does not shown image. 
        ... 
        } 
       } 

образце URI (напечатанной в журнале):

содержание: //com.android.contacts/contacts/52

я не знать причину, почему uri не показывает изображения. пожалуйста помогите.

+0

Вы отлаживали его? это означает, что либо ваш UriArrayList не имеет требуемого объекта, либо ваш photo_view имеет значение null. вы пытались его отладить? какой объект имеет значение null? –

+0

ArrayList имеет значения Uri. Я получаю нулевой указатель на вид изображения, как указано в вопросе –

+0

, как вы устанавливаете свой photo_view в своем телезрителе? как вы его инициализируете? в getView() вашего адаптера, возможно? Я не вижу кода для этого. –

ответ

1

Я решил проблему с помощью растрового изображения. imageView.setImageURI не используется для меня. так что вместо setImageURI используется следующий код.

private Bitmap loadContactPhoto(ContentResolver cr, int id) { 
     Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id); 
     InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri); 
     if (input == null) { 
      return null; 
     } 
     return BitmapFactory.decodeStream(input); 

    } 

Здесь id - идентификатор контакта, а не идентификатор фотографии контакта.

Смежные вопросы