今天热门
热点:

用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,结果就是,只保存了最后一个图片,其他的都被覆盖了。

像这种情况,应该如何让其以给定的文件名来保存呢?

谢谢

解决方案

文件名可以用md5(url)来做保证图片名的唯一性

请求同时发出,但都是异步的,先请求的不一定是先执行完的,所以,存在你这个问题。
同样的道理,如果按你这种命名方式,把名称放到listener中,也会出现这个问题。。。
所以,命名规则要变动一下。

图片是在线程中下载的,而imgfile变量是在主线程中的,当图片下载下来的时候主线程已经把for循环执行完了,imgfile的值已经变成了img10.jpg,因此图片都是同一个名字,下载并保存会互相覆盖。要解决这个问题也很简单,在下载线程中保存各自下载图片的名字就可以了,比如这里可以在new出来的Response.Listener对象中设置一个变量保存文件名。

www.zrccd.nettrue/topics/20181029/188385.htmlTechArticle用volley 批量下载图片,但遇到存放文件路径和名称的问题,volley路径 先上代码 for(StringimgUrl:imgUrls){ jj=jj+1; imgfile=ItemDirPathStr+"/img"+jj+".jpg"; ImageRequestimageRequest=newImageRequest( imgUrl, newRespo...

相关文章

    暂无相关文章

用户评论

大家都在看