毕加索图像缓存

时间:2014-03-07 13:43:16

标签: android image caching picasso

我想用Picasso图像缓存下载以下图像下载代码。

DownloadImage downloadImage = new DownloadImage(); 
downloadImage.execute(advert.getImgUrl());

private class DownloadImage extends AsyncTask<String, Void, Bitmap> {

    @Override
    protected Bitmap doInBackground(String... arg) {
        Bitmap bmp = null;
        try {
            URL url = new URL(arg[0]);
            bmp = BitmapFactory.decodeStream(url.openConnection()
                    .getInputStream());

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        return bmp;

    }

    @Override
    protected void onPostExecute(Bitmap result) {
        if (result == null) {
            Intent intent = new Intent(AdvertisingActivity.this,
                    AdvertisingErrorActivity.class);
            intent.putExtra("ad-error", "Error downloading image");
        }
        adImg.setImageBitmap(result);
        super.onPostExecute(result);
    }
}

我有几个问题。

  1. 我想并行下载多个图片。如果我使用不同的网址值重复调用Picasso.with(getActivity()).load(url);,是否可以完成此操作?

  2. 我想在一个活动中下载图像并在另一个活动中使用它。这可能吗?怎么办呢?

  3. 如果我使用相同的网址值多次拨打Picasso.with(getActivity()).load(url);,这是否会在下载图片后加载后续调用的缓存图片?

  4. 如果由于某些原因图像下载过程没有成功,您能否让Picasso向您报告失败?

1 个答案:

答案 0 :(得分:12)

我已经对你的问题进行了更多研究,并决定将其作为答案而不是评论发表。

  1. 是 - Picasso异步加载图像,因此重复调用会导致图像并行下载。
  2. 是 - 只需正常拨打电话,Picasso将处理下载图片的重复使用,例如在Activity1中,调用Picasso.with(this).load("image1");,然后调用Activity2中的相同URL。图像已经被缓存(在内存或设备存储中),毕加索将重新使用它,而不是再次下载。
  3. 是 - 见上文(毕加索将自动使用缓存图像)
  4. 这似乎没有这么明确的答案。您可以做的一件事是提供一个图像,以便在获取真实图像时发生错误:

    Picasso.with(context) .load(url) .placeholder(R.drawable.user_placeholder) .error(R.drawable.user_placeholder_error) .into(imageView);

    在尝试从网络上获取图像时,将显示“占位符”;例如,如果URL无效或没有Internet连接,将显示“错误”图像。

    更新,2014年3月17日:

    Picasso支持使用回调来报告失败。修改你的通常电话(例如上面的例子),如下所示:

    .into(imageView, new Callback() {
        @Override
        public void onSuccess() {
            // TODO Auto-generated method stub    
        }
    
        @Override
        public void onError() {
            // TODO Auto-generated method stub
        }
    });
    
  5. 总之,听起来毕加索对你来说是一个很棒的图书馆选择。它确实使图像下载非常快速和简单,所以我非常喜欢它。

相关问题