Android下载多个图片(传统Http请求方式)
2016-03-22 15:56
549 查看
今天要做一个图片下载方式,图片不算多,图片最多有5个左右。我想了好几个办法,
1、文件下载:可行,但是对于单一的图片下载来说,略复杂了些。
2、第三方图片下载:可行,但是需要去了解和学习第三方,所需的时间成本还有该第三方框架的利用率不足,jar包可能还不小。
3、循环子线程:可行(不推荐), 如果我要下载2个图片,将子线程加入for循环内,并最终呈现。
但有严重缺陷,线程延时,图片顺序不能做保证。如果是线程套线程的话,第一个子线程结束了,嵌套在该子线程f的or循环内的子线程还没结束,从而主线程获取不到子线 程 里获取的图片。
* 最终方法:其实也是最简单的方法,用一个子线程就可以搞定。 1、首先让后台给你提供一个接口 “ 获取所有需要拉取的图片的名称” 2、其次就是路径了。
下面贴上关键代码:
这里是我的子线程方法:
这里是多图片下载的关键地方:
参数path (例:Http://192.168.0.1/Image/)
参数picName (例: picName[0]=123456.jpg)
直接在这里根据我的图片名数组的长度,循环Http请求,并形成一个Bitmap[] 再返回。
OK 大功告成,仅仅用了一个子线程就可以获取多个图片下载。
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 大功告成,仅仅用了一个子线程就可以获取多个图片下载。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories