15-多线程编程(02-AsyncTask异步任务介绍二)
来源:互联网 发布:数据安全管理的概念 编辑:程序博客网 时间:2024/06/15 03:13
将上一个项目中的进度条改为能显示进度的进度条。
MainActivity.java:
package net.csdn.leigo.asynctask;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;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.view.View;import android.widget.ImageView;public class MainActivity extends Activity {private ProgressDialog progressDialog;private ImageView mDownloadImg;private static final String IMG_URL = "http://p1.qhimg.com/d/_onebox/search.png";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mDownloadImg = (ImageView) findViewById(R.id.iv_download);progressDialog = new ProgressDialog(this);progressDialog.setTitle("提示信息");progressDialog.setMessage("正在下载中,请稍侯...");progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);}public void downloadImg(View v) {new MyAsyncTask().execute(IMG_URL);}class MyAsyncTask extends AsyncTask<String, Integer, Bitmap> {// 任务执行之前的操作@Overrideprotected void onPreExecute() {super.onPreExecute();progressDialog.show();}@Overrideprotected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);progressDialog.setProgress(values[0]);}// 主要完成耗时操作@Overrideprotected Bitmap doInBackground(String... params) {Bitmap bitmap = null;InputStream inputStream = null;ByteArrayOutputStream baos = new ByteArrayOutputStream();try {// 使用网络链接类HttpClient类完成对网络数据的读取HttpClient httpClient = new DefaultHttpClient(); // params[0] 代表连接的url HttpGet httpGet = new HttpGet(params[0]);HttpResponse httpResponse = httpClient.execute(httpGet);if (httpResponse.getStatusLine().getStatusCode() == 200) {HttpEntity httpEntity = httpResponse.getEntity();inputStream = httpEntity.getContent();// 获得文件总长度long totalSize = httpEntity.getContentLength();int len = 0;int count = 0;byte[] buffer = new byte[1024];while ((len = inputStream.read(buffer)) != -1) {baos.write(buffer, 0, len);count += len;// 调用publishProgress公布进度,最后onProgressUpdate方法将被执行publishProgress((int) ((count / (float) totalSize) * 100));// 为了演示进度,休眠100毫秒Thread.sleep(100);}byte[] data = baos.toByteArray();bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);}} catch (Exception e) {e.printStackTrace();} finally {if (inputStream != null) {try {baos.close();inputStream.close();} catch (IOException e) {e.printStackTrace();}}}return bitmap;}// 主要是更新UI操作@Overrideprotected void onPostExecute(Bitmap result) {super.onPostExecute(result);progressDialog.dismiss();mDownloadImg.setImageBitmap(result);}}}
- 15-多线程编程(02-AsyncTask异步任务介绍二)
- 15-多线程编程(01-AsyncTask异步任务介绍一)
- Android 多线程----AsyncTask异步任务详解
- 多线程--异步任务AsyncTask由浅入深探究
- Android 多线程----AsyncTask异步任务详解
- AsyncTask异步任务学习(详细介绍)
- AsyncTask异步任务的“白话”介绍
- Android开发--AsyncTask异步任务(二)
- AsyncTask异步任务使用详细实例(二)
- AsyncTask异步任务线程框架(二)
- Android多线程编程、异步机制(AsyncTask)
- Java多线程之异步任务——AsyncTask
- Android异步任务AsyncTask
- AsyncTask异步任务
- 异步任务AsyncTask
- AsyncTask异步任务
- AsyncTask异步任务
- Android--AsyncTask异步任务
- zzzz中国bbbb
- uva 12100 Printer Queue 优先级队列模拟题 数组模拟队列
- pthread_cond_signal
- (转载)Cocos2d-x学习之windows 7的visual studo 2010开发环境安装
- uva 327 Evaluating Simple C Expressions 简易C表达式计算 stl模拟
- 15-多线程编程(02-AsyncTask异步任务介绍二)
- [2013.7.15] 工作日志
- Servlet的几种跳转
- 设置Linux可以查看历史命令的执行时间
- 华为手机logcat不出日志解决方案
- struts2学习笔记----wildcard
- 设计模式
- 《算法导论》习题解答 Chapter 22.1-2(邻接矩阵与链表)
- web.xml 详解