版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21451721/article/details/50955848
今天要做一个图片下载方式,图片不算多,图片最多有5个左右。我想了好几个办法,
1、文件下载:可行,但是对于单一的图片下载来说,略复杂了些。
2、第三方图片下载:可行,但是需要去了解和学习第三方,所需的时间成本还有该第三方框架的利用率不足,jar包可能还不小。
3、循环子线程:可行(不推荐), 如果我要下载2个图片,将子线程加入for循环内,并最终呈现。
但有严重缺陷,线程延时,图片顺序不能做保证。如果是线程套线程的话,第一个子线程结束了,嵌套在该子线程f的or循环内的子线程还没结束,从而主线程获取不到子线 程 里获取的图片。
* 最终方法:其实也是最简单的方法,用一个子线程就可以搞定。 1、首先让后台给你提供一个接口 “ 获取所有需要拉取的图片的名称” 2、其次就是路径了。
下面贴上关键代码:
这里是我的子线程方法:
String[] picName;<span style="color:#009900;">//这是你通过接口获取的,图片名数组</span>
Bitmap[] bm=new Bitmap[picName.length];//<span style="color:#009900;">创建一个Bitmap[] 来接收图片资源</span>
private void ManyPic(final String[] picName) {
new Thread(new Runnable() {
@Override
public void run() {
Message ms = handler.obtainMessage();
try {
if (ImageUtil.getBitmap(url, picName) != null) {
bm = ImageUtil.getBitmap(url, picName);
ms.what = BITMAP_SUCCESS;
ms.obj = bm;
ms.sendToTarget();
} else {
ms.what = BITMAP_ERROR;
ms.obj = "下载失败";
ms.sendToTarget();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
这里是多图片下载的关键地方:
参数path (例:Http://192.168.0.1/Image/)
参数picName (例: picName[0]=123456.jpg)
直接在这里根据我的图片名数组的长度,循环Http请求,并形成一个Bitmap[] 再返回。
<span style="color:#3366ff;">/**
* 获取网络上需要下载的图片
* @path=固定的路径
* @picName=提前获取的图片名的数组
* */</span>
public static Bitmap[] getBitmap(String path,String[] picName) throws IOException{
Bitmap[] b=new Bitmap[picName.length];
<span style="color:#009900;">//根据图片数组长度来,循环获取我们需要的图片数组</span>
for (int i = 0; i < picName.length; i++) {
URL url = new URL(path+picName[i]);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
<span> </span><span style="color:#009900;">//这里可以调节延迟时间</span>
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
if(conn.getResponseCode() == 200){
InputStream inputStream = conn.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
b[i]=bitmap;
}
}
return b;
}