您的位置:首页 > 理论基础 > 计算机网络

开启AsyncTask从网络加载图片

2016-06-23 19:19 459 查看
/*AsyncTask  异步任务即做一些简单的异步处理  ;是handle与线程池的封装
* 第一个泛型:参数类型泛型
* 第二个泛型:更新进度泛型
* 第三个泛型:onProgressUpdate的返回结果的泛型
*
*/

class BitmapTask extends AsyncTask<Object, Void, Bitmap>{

private ImageView pic;
private String murl;
/**
* 后台耗时方法在此执行,子线程
*/
@Override
protected Bitmap doInBackground(Object... params) {
pic = (ImageView) params[0];
murl = (String) params[1];

pic.setTag(murl);//将图片与url绑定
return downloadBitmap(murl);
}
/**
* 更新进度,主线程
*/
@Override
protected void onProgressUpdate(Void... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
/**
* 后台耗时方法结束之后,在此执行,主线程
*/
@Override
protected void onPostExecute(Bitmap result) {
if(result!=null){

String tag = (String) pic.getTag();
if(tag.equals(murl)){
pic.setImageBitmap(result);
}

}
mlocalcacheutils.setBitmapTolocal(murl, result);
mmemorycacheutils.setBitmapTomemory(murl, result);
}
}


/**
*
* 下载图片
* @return
*/
private Bitmap downloadBitmap(String url){
HttpURLConnection conn=null;
try {
conn=(HttpURLConnection) new URL(url)
.openConnection();

conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
conn.setRequestMethod("GET");
conn.connect();

int responseCode = conn.getResponseCode();//响应码

if(responseCode==200){//表示成功连接
InputStream inputStream = conn.getInputStream();

//图片的压缩设置
BitmapFactory.Options option=new Options();
option.inSampleSize=2;//表示将图片压缩原来的二分之一,需要根据图片的大小来计算出压缩值的大小
option.inPreferredConfig=Bitmap.Config.RGB_565;//通过设置图片的格式即像素大小来进行图片的压缩

Bitmap bitmap = BitmapFactory.decodeStream(inputStream,null,option);
return bitmap;
}

} catch (IOException e) {

e.printStackTrace();
}
finally{
conn.disconnect();
}
return null;

}


最后使用

public void getBitmapFromNet(ImageView iv_photo, String url) {
// TODO Auto-generated method stub
BitmapTask bitmaptask=new BitmapTask();
bitmaptask.execute(iv_photo,url);//开启AsyncTask,参数在doInBackground获取
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: