设为首页 加入收藏

TOP

Android使用HttpURLConnection下载图片
2014-11-23 23:19:44 来源: 作者: 【 】 浏览:7
Tags:Android 使用 HttpURLConnection 下载 图片

讲到http就必需要了解URI和URL


URI (uniform resource identifier)统一资源标志符;


URL(uniform resource location )统一资源定位符(或统一资源定位器);


可以理解成URL是URI的子集,URI是一抽象的标识符,URL可以理解成具体的标识符;只要是网络上的资源就能找到唯一的URL。


目录结构



效果图


Android使用HttpURLConnection下载图片


--------------------------------------分割线 --------------------------------------


本文完整Demo下载


--------------------------------------分割线 --------------------------------------


关键代码

HttpUtils.java类


package com.dzt.downloadimage.utils;


import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;


import android.graphics.Bitmap;
import android.graphics.BitmapFactory;


/**
* http工具类 http可以使用HttpURLConnection或HttpClient
*
* @author Administrator
* @date 2014.05.10
* @version V1.0
*/
public class HttpUtils {


/**
* 获取网络图片
*
* @param urlString
* 如:http://f.hiphotos.baidu.com/image/w%3D2048/sign=3
* b06d28fc91349547e1eef6462769358
* /d000baa1cd11728b22c9e62ccafcc3cec2fd2cd3.jpg
* @return
* @date 2014.05.10
*/
public static Bitmap getNetWorkBitmap(String urlString) {
URL imgUrl = null;
Bitmap bitmap = null;
try {
imgUrl = new URL(urlString);
// 使用HttpURLConnection打开连接
HttpURLConnection urlConn = (HttpURLConnection) imgUrl
.openConnection();
urlConn.setDoInput(true);
urlConn.connect();
// 将得到的数据转化成InputStream
InputStream is = urlConn.getInputStream();
// 将InputStream转换成Bitmap
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
System.out.println("[getNetWorkBitmap->]MalformedURLException");
e.printStackTrace();
} catch (IOException e) {
System.out.println("[getNetWorkBitmap->]IOException");
e.printStackTrace();
}
return bitmap;
}
}


使用到网络必需要添加权限和要有网络,否则下载失败



下载属于耗时的操作,如果放在UI线程出容易出现ANR;所以Android4.0之后对网络的操作不能放在UI线程,在这里我把下载放在AsyncTask处理。


class downloadImageTask extends AsyncTask {


@Override
protected Boolean doInBackground(String... params) {
// TODO Auto-generated method stub
System.out.println("[downloadImageTask->]doInBackground "
+ params[0]);
mDownloadImage = HttpUtils.getNetWorkBitmap(params[0]);
return true;
}


// 下载完成回调
@Override
protected void onPostExecute(Boolean result) {
// TODO Auto-generated method stub
image.setImageBitmap(mDownloadImage);
System.out.println("result = " + result);
super.onPostExecute(result);
}


// 更新进度回调
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}


}


在onPostExecute和onProgressUpdate可以方便我们更新UI,当然也可以开一个线程处理,使用AsyncTask就更方便。


网络上一个不错的资源:http://square.github.io/okhttp/


OkHttp是Square的一款产品,是一个Java的开源HTTP和SPDY客户端开发包,支持Android。Android自带的两个HTTP框架(HttpURLConnection和HttpClient),在各种Android OS版本一直充斥着错误,可以使任何理智的开发者走向崩溃。不过幸运地是,OkHttp解决了这些问题。OkHttp是建立在HttpUrlConnection上,从Android代码库保持最新的修复,这意味着再也没有与旧操作系统版本出现兼容性问题的噩梦


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android实现批量添加联系人到通讯.. 下一篇Android使用HttpClient下载图片

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: