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

异步任务下载网络图片

2016-10-04 14:40 239 查看
package com.example.mydouban;

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;
import android.os.AsyncTask;

public class LoadImageAsynTask extends AsyncTask<String, Void, Bitmap>{

LoadImageAsynTaskCallBack loadImageAsynTaskCallBack;

public LoadImageAsynTask(LoadImageAsynTaskCallBack loadImageAsynTaskCallBack){

this.loadImageAsynTaskCallBack=loadImageAsynTaskCallBack;

}

//设置回调接口
public interface LoadImageAsynTaskCallBack{

public void beforeLoadImage();
public void afterLoadImage();
}

/*
* 异步任务执行之前调用
*/
@Override
protected void onPreExecute() {
//具体执行什么操作LoadImageAsynTask不知道
//让调用LoadImageAsynTask的人去实现
loadImageAsynTaskCallBack.beforeLoadImage();

super.onPreExecute();
}

/*
* 异步任务执行之后调用
*/

@Override
protected void onPostExecute(Bitmap result) {
// TODO Auto-generated method stub
loadImageAsynTaskCallBack.afterLoadImage();
super.onPostExecute(result);
}

/*
* 后台子线程运行的异步任务
*/

@Override
protected Bitmap doInBackground(String... params) {

try {
String path=params[0];
URL url=new URL(path);
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
InputStream is=conn.getInputStream();
return BitmapFactory.decodeStream(is);

} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}

}

//  调用这个异步任务并且sd卡缓存图片
//加入两个sd卡的权限  WRITE_EXTERNAL_STORAGE  MOUNT_NUMOUNT_FILESYSTEM

//获取图片的名称
String iconurl=url;
String iconName=iconurl.substring(iconurl.lastIndexOf("/")+1, iconurl.length());

File file=new File("/sdcard/"+iconName);
if(file.exists()){
iv_icon.setImageURI(Uri.fromFile(file));
}else{

LoadImageAsynTask task=new LoadImageAsynTask(new LoadImageAsynTaskCallBack() {

@Override
public void beforeLoadImage() {
// TODO Auto-generated method stub
iv_icon.setImageResource();

}

@Override
public void afterLoadImage(Bitmap bitmap) {
// TODO Auto-generated method stub
if(bitmap!=null){
iv_icon.setImageBitmap(bitmap);
//把图片保存到sd卡上
File file=new File("/sdcard/"+iconName);
FileOutputStream stream=new FileOutputStream(file);
bitmap.compress(CompressFormat.JPEG, 100, stream);
}
else{
iv_icon.setImageResource();
}
}
});
task.execute(url);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: