</pre><pre name="code" class="java">
package com.example.asynctaskdownload;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import android.R.integer;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
private Button btn_download;
private ImageView image;
private ProgressDialog progressDialog;
private static String URL = "http://n.sinaimg.cn/transform/20141219/avxeafr8092811.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
btn_download.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
new MyAsyncTask().execute(URL);
}
});
}
private void initView() {
// TODO Auto-generated method stub
btn_download = (Button) findViewById(R.id.btn_download);
image = (ImageView) findViewById(R.id.iv_image);
}
class MyAsyncTask extends AsyncTask<String, Integer, Bitmap> {
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
if (image != null) {
image.setVisibility(View.GONE);
}
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setIcon(R.drawable.ic_launcher);
progressDialog.setTitle("提示信息");
progressDialog.setMessage("正在下载,请稍后...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// 开始下载 对话框进度条显示
progressDialog.show();
progressDialog.setProgress(0);
}
@Override
protected Bitmap doInBackground(String... params) {
// TODO Auto-generated method stub
// params是一个可变长的数组 在这里我们只传进来了一个url
java.net.URL url = null;
try {
url = new java.net.URL(params[0]);
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} // URL对象
Bitmap bitmap = null;
HttpURLConnection connection;
InputStream is;// 用于获取数据的输入流
ByteArrayOutputStream bos;// 可以捕获内存缓冲区的数据,转换成字节数组。
int len;
float count = 0, total;// count为图片已经下载的大小 total为总大小
try {
connection = (HttpURLConnection) url.openConnection();
total = connection.getContentLength();
is = connection.getInputStream();
bos = new ByteArrayOutputStream();
byte[] data = new byte[1024];
while ((len = is.read(data)) != -1) {
count += len;
bos.write(data, 0, len);
// 调用publishProgress公布进度,最后onProgressUpdate方法将被执行
publishProgress((int) (count / total * 100));
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
bitmap = BitmapFactory.decodeByteArray(bos.toByteArray(), 0,
bos.toByteArray().length);
is.close();
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
// 下载完成 对话框进度条隐藏
progressDialog.cancel();
image.setImageBitmap(result);
image.setVisibility(View.VISIBLE);
}
/*
* 在doInBackground方法中已经调用publishProgress方法 更新任务的执行进度后 调用这个方法 实现进度条的更新
*/
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
progressDialog.setProgress(values[0]);
}
}
}
1.asyncTask里的第二个参数Integer 写成了integer
2.bitmap = BitmapFactory.decodeByteArray(bos.toByteArray(), 0,
bos.toByteArray().length);
is.close();
bos.close();放在了while循环里