2014-07-11 3 views
0

Мне нужно, чтобы показать все контакты в ListView в моем приложении:Получить Контакт Список изображений [Избегайте OutOfMemory Exception]

Но, показывая контактные изображения, используя следующий код:

viewholder.imageView.setImageBitmap(MediaStore.Images.Media.getBitmap(activity 
        .getContentResolver(), Uri.parse(currentItem.getContactImage()))); 

, который получение битмапа в памяти;

GC называется несколько раз, когда я просматриваю свой список, и я опасаюсь исключения OutOfMemory в этом случае.

Каков альтернативный метод для этого. Я хочу избежать получения изображений в виде BitMap в памяти.

Использование UniversalImageLoader поможет ???

Пожалуйста, помогите!

Заранее благодарен.

+0

сделать и хочет, чтобы показать изображения из списка контактов вашего телефона в списке –

+0

Да, но без получения растрового изображения в памяти – AabidMulani

ответ

0

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

public Bitmap getFacebookPhoto(String phoneNumber) { 
     Uri phoneUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); 
     Uri photoUri = null; 
     ContentResolver cr = _context.getContentResolver(); 
     Cursor contact = cr.query(phoneUri, 
       new String[] { ContactsContract.Contacts._ID }, null, null, null); 

     if (contact.moveToFirst()) { 
      long userId = contact.getLong(contact.getColumnIndex(ContactsContract.Contacts._ID)); 
      photoUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, userId); 

     } 
     else { 
      Bitmap defaultPhoto = BitmapFactory.decodeResource(_context.getResources(), android.R.drawable.ic_menu_report_image); 
      return defaultPhoto; 
     } 
     if (photoUri != null) { 
      InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(
        cr, photoUri); 
      if (input != null) { 
       return BitmapFactory.decodeStream(input); 
      } 
     } else { 
      Bitmap defaultPhoto = BitmapFactory.decodeResource(_context.getResources(), android.R.drawable.ic_menu_report_image); 
      return defaultPhoto; 
     } 
     Bitmap defaultPhoto = BitmapFactory.decodeResource(_context.getResources(), android.R.drawable.ic_menu_report_image); 
     return defaultPhoto; 
    } 
+0

Спасибо, но этот код получает растровое изображение в памяти. И это приведет к OutOfMemory, что список контактов огромный. Мне нужно показать изображение с помощью ContactList Photo uri. – AabidMulani

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