首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Picasso图像缓存

Picasso图像缓存
EN

Stack Overflow用户
提问于 2014-03-07 13:43:16
回答 1查看 3.7K关注 0票数 5

我想下载下面的图像下载代码与毕加索图像缓存。

代码语言:javascript
运行
复制
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. 我想同时下载多张图片。如果我用不同的url值重复调用Picasso.with(getActivity()).load(url);,这就完成了吗?
  2. 我想在一个活动中下载图像,然后在另一个活动中使用它。这个是可能的吗?这是如何做到的呢?
  3. 如果我用相同的url值多次调用Picasso.with(getActivity()).load(url);,是否会在下载映像之后加载缓存的映像以供后续调用?
  4. 如果图像下载过程由于某些原因未能成功,您能让毕加索报告失败吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-08 15:48:53

我已经对你的问题做了更多的研究,并决定我应该把它作为回答而不是评论。

  1. 是的- Picasso异步加载图像,因此重复调用将导致图像被并行下载。
  2. 是的--就像往常一样打电话,毕加索将处理下载图像的重复使用,例如在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); 在尝试从web获取图像时,将显示“占位符”;例如,如果URL无效或没有Internet连接,则会显示“错误”图像。 最新情况,17/03/2014: Picasso支持使用回调来报告故障。修改通常的调用(例如,上面的示例)如下: .into(imageView,新回调(){@重载公共空onSuccess() { // TODO自动生成的方法存根} @Override void onError() { // TODO自动生成的方法存根}));

总之,毕加索对你来说是个很好的图书馆选择。它确实使图像下载非常快速和非常容易,所以我非常喜欢它。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22251748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档