0

我有一个ListView,它显示了电话簿中的某些联系人。我使用这个https://stackoverflow.com/a/10235381/1809507作为Cache类并使用AsyncTask。Android ListView与AsyncTask图像问题

当联系人没有照片时,我使用默认的照片。我在XML中设置了默认的一个。当我使用以下方法设置联系人照片时,如果它存在,我滚动列表查看那些没有照片的联系人开始获取其他联系人照片。如果我从retrieveContactPhoto方法获取默认图片作为位图,而不是null并分配给imageview,它的效果很好,但我认为这是不是一个很好的解决方案,因为有很多没有照片的联系人,因为我会多次缓存相同的默认图片。或者我错了?

@Override 
    protected Bitmap doInBackground(Void... args) 
    { 
     Bitmap bm = HelpClasses.retrieveContactPhoto(contextInput, HelpClasses.fetchContactIdFromPhoneNumber(contextInput, phoneNumber)); 
     if(bm != null) 
     { 
      synchronized (cache) 
      { 
       cache.put(phoneNumber, bm); 
      } 

     } 
     return bm; 
    } 

@Override 
protected void onPostExecute(Bitmap result) 
{ 
    if(mView != null && result != null) 
    { 
     mView.setImageBitmap(result); 
    } 
} 
+0

http://samir-mangroliya.blogspot.in/p/android-read-contact-and-display-in.html –

+0

正如你可以看到我的代码我已经有了方法fetchContactIdFromPhoneNumber,然后从联系人retrieveContactPhoto ID。 – edoniti

回答

0

我认为你正在寻找这个库:https://github.com/nostra13/Android-Universal-Image-Loader

或者,您可能希望更多的“谷歌”之一:https://code.google.com/p/libs-for-android/wiki/ImageLoader

你可以保留所有的图像结合,提取,缓存的东西去图书馆。

+0

非常感谢,但是这个库也会缓存默认的照片。我认为这是不必要的,我想让来自XML的默认照片不再从缓存或SD卡分配。 – edoniti

+0

默认图像缓存在内存中,所有图像视图都会引用同一个实例。 – Robin