2014-07-11 53 views
0

我需要顯示在ListView所有聯繫人在我的應用程序:獲取聯繫人列表圖片[避免內存不足異常]

但同時顯示使用下面的代碼聯繫人圖片:

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

即在內存中獲取BitMap;

當我滾動我的列表視圖時,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