使用AsyncTask异步任务更新进度
来源:互联网 发布:淘宝介入后卖家不退款 编辑:程序博客网 时间:2024/05/04 20:37
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" > <Button android:id="@+id/btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="start" android:text="开始" /> <ImageView android:id="@+id/iv" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
本次demo是展示如何使用AsyncTask更新imageView图片,并练习如何自定义dialog控件实现loading,其中(1)、(2)使用系统的自带dialog控件,(3)为自定义控件
demo使用的布局为:
(1)带圈圈的进度条(使用系统自带控件)
package com.example.asyncdemo;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;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.ImageView;/** * TODO (这里描述这个类的作用 ) * * @date: 2013-11-30 下午11:52:32 * @author Hugo * @version 1.0.0 */public class AsyncTaskDemo extends Activity {private ImageView ivImage;private static String image_path = "http://ww4.sinaimg.cn/bmiddle/786013a5jw1e7akotp4bcj20c80i3aao.jpg";private ProgressDialog dialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.async_task);ivImage = (ImageView) findViewById(R.id.iv);dialog = new ProgressDialog(this);dialog.setTitle("提示信息");dialog.setMessage("正在下载,请稍后...");dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);}public void start(View view) {AsyncTask<String, Void, Bitmap> task = new DownloadImgTask();task.execute(image_path);}private class DownloadImgTask extends AsyncTask<String, Void, Bitmap> {private Bitmap bitmap;@Overrideprotected void onPreExecute() {super.onPreExecute();dialog.show();}@Overrideprotected void onProgressUpdate(Void... values) {// TODO Auto-generated method stubsuper.onProgressUpdate(values);}@Overrideprotected void onPostExecute(Bitmap result) {super.onPostExecute(result);if (null != result) {ivImage.setImageBitmap(result);}dialog.dismiss();}@Overrideprotected Bitmap doInBackground(String... params) {HttpClient httpClient = new DefaultHttpClient();HttpGet httpGet = new HttpGet(params[0]);bitmap = null;try {HttpResponse resp = httpClient.execute(httpGet);if (HttpStatus.SC_OK == resp.getStatusLine().getStatusCode()) {HttpEntity entity = resp.getEntity();Log.i("输入长度", "" + entity.getContentLength());byte[] bytes = EntityUtils.toByteArray(entity);Log.i("输出长度", "" + bytes.length);bitmap = BitmapFactory.decodeByteArray(bytes, 0,bytes.length);}} catch (Exception e) {e.printStackTrace();}return bitmap;}}}
效果如下:
(2)带进度条
package com.example.asyncdemo;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;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.view.View;import android.widget.ImageView;/** * 有进度条的demo * * @date: 2013-11-30 下午11:52:32 * @author Hugo * @version 1.0.0 */public class AsyncTaskDemo1 extends Activity {private ImageView ivImage;private static String image_path = "http://ww4.sinaimg.cn/bmiddle/786013a5jw1e7akotp4bcj20c80i3aao.jpg";private ProgressDialog dialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.async_task);ivImage = (ImageView) findViewById(R.id.iv);dialog = new ProgressDialog(this);dialog.setTitle("提示信息");dialog.setCancelable(false);dialog.setMessage("正在下载,请稍后...");dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);}public void start(View view) {AsyncTask<String, Integer, Bitmap> task = new DownloadImgTask();task.execute(image_path);}private class DownloadImgTask extends AsyncTask<String, Integer, Bitmap> {@Overrideprotected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);dialog.setProgress(values[0]);}@Overrideprotected void onPreExecute() {super.onPreExecute();dialog.show();}@Overrideprotected void onPostExecute(Bitmap result) {super.onPostExecute(result);if (null != result) {ivImage.setImageBitmap(result);}dialog.dismiss();}@Overrideprotected Bitmap doInBackground(String... params) {HttpClient httpClient = new DefaultHttpClient();HttpGet httpGet = new HttpGet(params[0]);Bitmap bitmap = null;InputStream is = null;ByteArrayOutputStream baos = new ByteArrayOutputStream();try {HttpResponse response = httpClient.execute(httpGet);if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {// 获取输入流is = response.getEntity().getContent();// 得到长度long length = response.getEntity().getContentLength();byte[] buffer = new byte[1024];int readLength = 0;long total = 0;// 读入数据到缓存while ((readLength = is.read(buffer)) != -1) {total += readLength;// 把缓存中的数据写入输出流baos.write(buffer, 0, readLength);// 更新进度publishProgress((int) (total * 100 / length));}// 解码成bitmapbyte[] data = baos.toByteArray();bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);}} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if (null != is) {is.close();is = null;}if (null != baos) {baos.close();baos = null;}} catch (Exception e2) {e2.printStackTrace();}}return bitmap;}}}
效果图
- 使用AsyncTask异步任务更新进度
- AsyncTask异步任务使用详细实例(一)+HttpClient+进度更新的设置
- 异步任务AsyncTask使用
- 异步任务AsyncTask使用
- AsyncTask异步任务使用解析
- 异步任务AsyncTask的使用
- 使用AsyncTask运行异步任务
- 使用AsyncTask运行异步任务
- AsyncTask异步任务使用详解
- AsyncTask异步任务类使用
- AsyncTask异步任务的使用
- 异步任务AsyncTask使用解析
- Android异步任务AsyncTask使用
- 异步任务AsyncTask使用解析
- 异步任务 AsyncTask 进度条的更新
- 异步更新ProgressBar(使用AsyncTask)
- 使用AsyncTask下载图片并更新进度
- Android异步更新UI的方式之使用AsyncTask异步任务
- nginx alias和root的区别
- 怎样写linux下的USB设备驱动程序
- 如何获取安卓手机当前壁纸的路径
- (Struts重构)构建一个简单的基于MVC模式的JavaWeb
- 数组统计分数 含有函数(升级版哦)
- 使用AsyncTask异步任务更新进度
- 去掉 网页浮窗显示你百度搜索过的信息
- HTML
- 寻找到大Bug一只
- gallery总结
- Android Touch事件的分发过程
- sdf
- 多边形重心问题-计算几何
- 指针数组的指针数组