1

现在我正在使用以下代码检索图像,它运行良好。但我想使用 . 实现缓存universal-image-loader。我已经在我的其他项目中实现了它,其中我有完整的图像 url,如 ~\images\pic1。 jpeg 。另一方面,在使用 Contacts api v3 时,我必须处理输入流,而且我没有如此完整的 url。所以我不知道如何实现universal-image-loader

供参考:联系 api v3

这是我现在正在使用的代码:

    Bitmap bm=BitmapFactory.decodeResource(HomeActivity.this.getResources(),
            R.drawable.profile_pic);
    CONSTANTS.buffer = new byte[4096];

// iterate the loop upto number of contacts
    for(int i=0;i<CONSTANTS.contactArrayList.size();i++)
    {


//if the contact has any profile pic then retrieve it otherwise set default profile pic from drawable folder

    if(CONSTANTS.contactArrayList.get(i).getContactPhotoLink().getEtag()!=null)
        {
            try
            {
                GDataRequest request = CONSTANTS.mContactService.createLinkQueryRequest(CONSTANTS.contactArrayList.get(i).getContactPhotoLink());
                  request.execute();
                  InputStream in = request.getResponseStream();
                  CONSTANTS.buffer = ByteStreams.toByteArray(in);
                  bm = BitmapFactory.decodeByteArray(CONSTANTS.buffer, 0, CONSTANTS.buffer.length);
                  in.close();
                  request.end();
            }
            catch (Exception e) {
                UTILS.Log_e("loadProfilePics error", e.toString());
            }

        }
        else
        {
            bm = BitmapFactory.decodeResource(HomeActivity.this.getResources(),
                    R.drawable.profile_pic);
        }
         CONSTANTS.contactArrayList.get(i).setContactPhoto(bm);
     }
4

1 回答 1

1

是的,universal-image-loader允许您这样做。只需按照以下步骤操作:

  1. 可以引入自己的url类型,例如contacts-api-v3://user_id=<user_id>
  2. 提供一种检索InputStream此类 url 的方法:

    public class CustomImageDownloader extends URLConnectionImageDownloader {
        @Override
        protected InputStream getStreamFromOtherSource(URI imageUri) throws IOException {
            if (imageUri.getScheme().equals("contacts-api-v3")) {
                // here you can use code provided in your question
                return retriveInputStreamForThisUser();
            }
            return null;
        }
    }
    
  3. 配置ImageLoader为使用您的CustomImageDownloader

    final ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(context);
    
    // some basic configuration should be here
    
    builder.imageDownloader(new CustomImageDownloader());
    
  4. 现在你可以这样使用它:

    ImageLoader.getInstance().displayImage("contacts-api-v3://user_id=123", imageView);
    
于 2013-01-06T10:12:29.233 回答