先上代码
for (String imgUrl : imgUrls) {
jj = jj + 1;
imgfile = ItemDirPathStr + “/img” + jj + “.jpg”;
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,结果就是,只保存了最后一个图片,其他的都被覆盖了。
像这种情况,应该怎么样让其以给定的文件名来保存呢?
谢谢
解决方案
30
图片是在线程中下载的,而imgfile变量是在主线程中的,当图片下载下来的时候主线程已经把for循环执行完了,imgfile的值已经变成了img10.jpg,因此图片都是同一个名字,下载并保存会互相覆盖。要解决这个问题也很简单,在下载线程中保存各自下载图片的名字就可以了,例如这里可以在new出来的Response.Listener对象中设置一个变量保存文件名。
5
文件名可以用md5(url)来做保证图片名的唯一性
5
请求同时发出,但都是异步的,先请求的不一定是先执行完的,所以,存在你这个问题。
同样的道理,假如按你这种命名方式,把名称放到listener中,也会出现这个问题。
所以,命名规则要变动一下。
同样的道理,假如按你这种命名方式,把名称放到listener中,也会出现这个问题。
所以,命名规则要变动一下。