我想用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);
}
}
我有几个问题。
我想并行下载多个图片。如果我使用不同的网址值重复调用Picasso.with(getActivity()).load(url);
,是否可以完成此操作?
我想在一个活动中下载图像并在另一个活动中使用它。这可能吗?怎么办呢?
如果我使用相同的网址值多次拨打Picasso.with(getActivity()).load(url);
,这是否会在下载图片后加载后续调用的缓存图片?
如果由于某些原因图像下载过程没有成功,您能否让Picasso向您报告失败?
答案 0 :(得分:12)
我已经对你的问题进行了更多研究,并决定将其作为答案而不是评论发表。
Picasso.with(this).load("image1");
,然后调用Activity2中的相同URL。图像已经被缓存(在内存或设备存储中),毕加索将重新使用它,而不是再次下载。这似乎没有这么明确的答案。您可以做的一件事是提供一个图像,以便在获取真实图像时发生错误:
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
}
});
总之,听起来毕加索对你来说是一个很棒的图书馆选择。它确实使图像下载非常快速和简单,所以我非常喜欢它。