用volley 批量下载图片,但遇到存放文件路径和名称的问题,volley路径
先上代码for (String imgUrl : imgUrls) {
jj = jj + 1;
imgfile = ItemDirPathStr + "/img" + jj + ".jpg";
ImageRequest imageRequest = new ImageRequest(
imgUrl,
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
// imageView.setImageBitmap(response);
Log.e(tag, "Suc down img" +imgfile + " 成功");
saveMyBitmap(imgfile , response);
}
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(tag, "Err down img" + imgfile + " " + error.toString());
}
});
mQueue.add(imageRequest);
}
====
问题描述:
为了简化和清楚,举例来说:
imgUrls里有10个url,分别对应10个图片的网址。
用for循环来,一个一个的new ImageRequest ,并加入mQueue。
图片都能正常下载下来。
但是,下载的文件名,只是最后一个循环的。比如:都为img10.jpg,结果就是,只保存了最后一个图片,其他的都被覆盖了。
像这种情况,应该如何让其以给定的文件名来保存呢?
谢谢
解决方案
同样的道理,如果按你这种命名方式,把名称放到listener中,也会出现这个问题。。。
所以,命名规则要变动一下。 图片是在线程中下载的,而imgfile变量是在主线程中的,当图片下载下来的时候主线程已经把for循环执行完了,imgfile的值已经变成了img10.jpg,因此图片都是同一个名字,下载并保存会互相覆盖。要解决这个问题也很简单,在下载线程中保存各自下载图片的名字就可以了,比如这里可以在new出来的Response.Listener对象中设置一个变量保存文件名。
用户评论