布局文件我就不写了,就是几个控件
package com.tz.kateasyctask_tz;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends Activity {
private ProgressBar pb;
private TextView progressText;
private ImageView iv_Image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pb = (ProgressBar) findViewById(R.id.pb);
progressText = (TextView) findViewById(R.id.tv);
iv_Image = (ImageView) findViewById(R.id.iv_image);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
start();
}
});
}
protected void start() {
//开始下载图片: url
String url = "http://e.hiphotos.baidu.com/image/pic/item/14ce36d3d539b600be63e95eed50352ac75cb7ae.jpg";
KateAsycTask task = new KateAsycTask();
task.execute(url,1+"");
}
/**
* Params : 开启线程传入的参数 :url 请求参数
* Progress :异步任务执行的进度
* Result :结果(异步任务执行后返回的结果)
* @author Administrator
*
*/
class KateAsycTask extends AsyncTask<String, Integer, Bitmap>{
private InputStream inputStream;
private final String SD_CARD_PATH = Environment.getExternalStorageDirectory().getAbsolutePath().toString();
private int maxLength;
private FileOutputStream outputStream;
/**
* 运行在主线程:在异步任务执行之前调用()
* 主要做一些初始化
*/
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
/**
* 在子线程中执行:执行下载任务
*/
@Override
protected Bitmap doInBackground(String... params) {
Bitmap bitmap =null;
String imageUrl = params[0];//String s = params[1];
try {
//1,创建url
URL url = new URL(imageUrl);
//2,打开链接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//3,设置请求方式
conn.setRequestMethod("GET");
//4,设置超时时间
conn.setConnectTimeout(5000);
if(conn.getResponseCode() == 200){
maxLength = conn.getContentLength();
//设置进度条的最大值
pb.setMax(maxLength);
inputStream = conn.getInputStream();
//为主线程中的imageView设置图片----
//bitmap = BitmapFactory.decodeStream(inputStream);
String fileName = imageUrl.substring(imageUrl.lastIndexOf("/")+1);
outputStream = new FileOutputStream(SD_CARD_PATH+"/"+ fileName);
int len = 0;
byte[] buffer = new byte[1024];
while((len=inputStream.read(buffer))!=-1){
outputStream.write(buffer, 0, len);
//更新进度条---不能在这里更新:onProgressUpdate
//onProgressUpdate(len);
publishProgress(len);//触发调用onProgressUpdate
}
bitmap = BitmapFactory.decodeFile(SD_CARD_PATH+"/"+fileName);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(outputStream!=null){
outputStream.close();
}
if(inputStream!=null){
inputStream.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return bitmap;
}
/**
* 在主线程中执行:接收异步任务下载的进度 更新UI线程的控件
*/
@Override
protected void onProgressUpdate(Integer... values) {
pb.setProgress(pb.getProgress()+values[0]);
String text = "下载进度:"+100 * pb.getProgress() / maxLength+ "%" ;
progressText.setText(text);
super.onProgressUpdate(values);
}
/**
* 在主线程中执行:接收异步线程返回的结果
*/
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
iv_Image.setImageBitmap(result);
}
/**
* 取消异步任务(终止)
*/
@Override
protected void onCancelled() {
// TODO Auto-generated method stub
super.onCancelled();
}
}
}