AsyncTask 的简单使用,给定一个uri地址下载图片,并显示进度条

AsyncTask 的简单使用,给定一个uri地址下载图片,并显示进度条

分类:android原创

AsyncTask 的简单使用,给定一个uri地址下载图片,并显示进度条代码如下:import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import org.apache.http.HttpResponse;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;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.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageView;public class AsyncTask_TestActivity extends Activity {private ProgressDialog dialog;ImageView image;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);dialog = new ProgressDialog(AsyncTask_TestActivity.this);dialog.setTitle("提示");dialog.setMessage("正在下载,请稍候…");dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);dialog.setCancelable(false);image = (ImageView) findViewById(R.id.imageView1);Button b = (Button) findViewById(R.id.button1);b.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new MyTask().execute("%3D2048/sign=5e82a4e40846f21fc9345953c21c6a60/cb8065380cd791231e957e6baf345982b2b780bc.jpg");}});}/** * 使用异步任务规则: 1>.声明一个类继承AsyncTask,标注三个参数的类型。 2>.第一个参数表示要执行的任务通常是网络的路径。 * 第二个参数表示进度的刻度。 第三个参数表示任务执行的返回结果。 */public class MyTask extends AsyncTask<String, Integer, Bitmap> {/** * 任务初始化时执行方法 */@Overrideprotected void onPreExecute() {super.onPreExecute();Log.i("asynctask", "onPreExecute()");dialog.show();}/** * 主要完成耗时操作 */@Overrideprotected Bitmap doInBackground(String… uri) {Bitmap bitmap = null;HttpClient httpClient = new DefaultHttpClient();HttpGet httpGet = new HttpGet(uri[0]);ByteArrayOutputStream outStream = new ByteArrayOutputStream();InputStream inStream = null;try {HttpResponse httpResponse = httpClient.execute(httpGet);if (httpResponse.getStatusLine().getStatusCode() == 200) {//得到输入流inStream = httpResponse.getEntity().getContent();byte[] datas = new byte[1024];int len = 0;long read_all_len=0;//先得到文件总大小long fileSize=httpResponse.getEntity().getContentLength();while ((len = inStream.read(datas)) != -1) {//计算进度条刻度read_all_len+=len;publishProgress((int)(read_all_len/(float)fileSize*100));// 图片写入缓存区outStream.write(datas, 0, len);}// 最后把图片写出去// outStream提供一个方法,,可以把httpResponse转换成byte数组。byte[] result = outStream.toByteArray();bitmap = BitmapFactory.decodeByteArray(result, 0,result.length);}} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (outStream != null) {try {outStream.close();} catch (IOException e) {e.printStackTrace();}}}return bitmap;}@Overrideprotected void onProgressUpdate(Integer… values) {super.onProgressUpdate(values);dialog.setProgress(values[0]);}/** * 更新ui */@Overrideprotected void onPostExecute(Bitmap result) {super.onPostExecute(result);image.setImageBitmap(result);dialog.dismiss();}}}

效果如下:

版权声明:本文为博主原创文章,未经博主允许不得转载。

上一篇android乱七八糟下一篇Android设置虚线、圆角、渐变

只要相信,期待就会成真

AsyncTask 的简单使用,给定一个uri地址下载图片,并显示进度条

相关文章:

你感兴趣的文章:

标签云: