Android下载多个图片(传统Http请求方式)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
	    }


OK 大功告成,仅仅用了一个子线程就可以获取多个图片下载。

猜你喜欢

转载自blog.csdn.net/qq_21451721/article/details/50955848
今日推荐