1 package com.wangzhen.tasks;
2
3 import java.io.ByteArrayOutputStream;
4 import java.io.IOException;
5 import java.io.InputStream;
6
7 import org.apache.http.HttpEntity;
8 import org.apache.http.HttpResponse;
9 import org.apache.http.client.ClientProtocolException;
10 import org.apache.http.client.methods.HttpGet;
11 import org.apache.http.impl.client.DefaultHttpClient;
12
13 import android.app.ProgressDialog;
14 import android.content.Context;
15 import android.graphics.Bitmap;
16 import android.graphics.BitmapFactory;
17 import android.os.AsyncTask;
18 import android.widget.ImageView;
19
20 /**
21 * 下载图片
22 *
23 * @author Administrator
24 *
25 */
26 public class DownloadTask extends AsyncTask<String, Integer, byte[]> {
27
28 Context mContext;
29 ImageView mImageView;
30 ProgressDialog mDialog = null;
31
32 public DownloadTask(Context context, ImageView imageView) {
33 mContext = context;
34 mImageView = imageView;
35 }
36
37 @Override
38 protected void onPreExecute() {
39 // TODO Auto-generated method stub
40 super.onPreExecute();
41 mDialog = new ProgressDialog(mContext);
42 mDialog.setTitle("提示信息");
43 mDialog.setMessage("正在下载中,请稍后");
44 mDialog.setCancelable(false);
45 mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
46 mDialog.show();
47 }
48
49 @Override
50 protected byte[] doInBackground(String... params) {
51
52 HttpGet request = new HttpGet(params[0]);
53 ByteArrayOutputStream BAOS = new ByteArrayOutputStream();
54 try {
55 HttpResponse response = new DefaultHttpClient().execute(request);
56 if (response.getStatusLine().getStatusCode() == 200) {
57 HttpEntity entity = response.getEntity();
58 // 得到文件总长度
59 long file_length = entity.getContentLength();
60 // 每次读取后累加的总长
61 long total_length = 0;
62 byte[] buffer = new byte[1024];
63 InputStream inputStream = entity.getContent();
64 int length = 0;
65 while ((length = inputStream.read(buffer)) > 0) {
66 // 累加进度
67 total_length += length;
68 // 将数据写入ByteArrayOutputStream中
69 BAOS.write(buffer, 0, length);
70 // 计算进度
71 int progress = (int) (total_length * 100 / file_length);
72 publishProgress(progress);
73 }
74 }
75 } catch (ClientProtocolException e) {
76 // TODO Auto-generated catch block
77 e.printStackTrace();
78 } catch (IOException e) {
79 // TODO Auto-generated catch block
80 e.printStackTrace();
81 }
82 return BAOS.toByteArray();
83 }
84
85 @Override
86 protected void onPostExecute(byte[] result) {
87 // TODO Auto-generated method stub
88 super.onPostExecute(result);
89 mDialog.dismiss();
90 Bitmap bitmap = BitmapFactory.decodeByteArray(result, 0, result.length);
91 mImageView.setImageBitmap(bitmap);
92 }
93
94 @Override
95 protected void onProgressUpdate(Integer... values) {
96 // TODO Auto-generated method stub
97 super.onProgressUpdate(values);
98 mDialog.setProgress(values[0]);
99 }
100 }