毕加索图像缓存

San*_*ung 5 android caching image 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我有几个问题.

  1. 我想并行下载多个图像.如果我Picasso.with(getActivity()).load(url);使用不同的url值重复调用,这样做了吗?

  2. 我想在一个活动中下载图像并在另一个活动中使用它.这可能吗?如何才能做到这一点?

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

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

Ell*_*lis 12

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

  1. 是的 - 毕加索异步加载图像,因此重复调用将导致图像并行下载.
  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连接,将显示"错误"图像.

    更新,17/03/2014:

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

    .into(imageView, new Callback() {
        @Override
        public void onSuccess() {
            // TODO Auto-generated method stub    
        }
    
        @Override
        public void onError() {
            // TODO Auto-generated method stub
        }
    });
    
    Run Code Online (Sandbox Code Playgroud)

总之,听起来毕加索将是一个很棒的图书馆选择.它确实使图像下载非常快速和非常容易,所以我非常喜欢它.

  • 很高兴听见!我最近发现毕加索,这让我的生活变得更轻松. (2认同)