博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android异步编程,Android异步操作----AsyncTask类
阅读量:7000 次
发布时间:2019-06-27

本文共 3013 字,大约阅读时间需要 10 分钟。

下面来看一个具体例子,从网上下载一张图片并显示:

1、创建DownloadPicture类继承AsyncTask:

package com.example.test02;

import java.io.ByteArrayOutputStream;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import Android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.AsyncTask;

import android.util.Log;

public class DownloadPicture extends AsyncTask

{

private DownloadCallBack downloadCallBack;

public DownloadPicture(DownloadCallBack downloadCallBack )

{

this.downloadCallBack = downloadCallBack;

}

//创建一个回调接口,用于在子线程执行时调回主线程,执行自定义操作

public interface DownloadCallBack

{

public void DoInPre();

public void Doing(int length , int max);

public void DoInFinish(Bitmap bitmap);

}

@Override

protected void onPreExecute()

{

downloadCallBack.DoInPre();

super.onPreExecute();

}

@Override

protected Bitmap doInBackground(String... params)

{

try

{

URL url = new URL(params[0].toString());

HttpURLConnection connection = (HttpURLConnection)url.openConnection();

connection.setConnectTimeout(5000);

int max = connection.getContentLength();

InputStream inputStream = connection.getInputStream();

ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int length = 0;

int total = 0;

while ((length = inputStream.read(buffer)) != -1)

{

arrayOutputStream.write(buffer, 0, length);

total += length;

//发送数据,更新下载进度

publishProgress(total , max);

Thread.sleep(100);

}

byte[] result = arrayOutputStream.toByteArray();

return BitmapFactory.decodeByteArray(result, 0, result.length);

}

catch (Exception e)

{

e.printStackTrace();

}

return null;

}

@Override

protected void onProgressUpdate(Integer... values)

{

Log.i("输出", "onProgressUpdate..." + values[0]);

downloadCallBack.Doing(values[0] , values[1]);

super.onProgressUpdate(values);

}

@Override

protected void onPostExecute(Bitmap result)

{

downloadCallBack.DoInFinish(result);

super.onPostExecute(result);

}

@Override

protected void onCancelled()

{

downloadCallBack.DoInFinish(null);

super.onCancelled();

}

}

2、实例化DownloadPicture,并执行:

downloadPicture = new DownloadPicture(new downloadCallBack());

downloadPicture.execute("upload/2014_05/140526122650482.jpg");

3、编辑匿名内部类downloadCallBack:

private class downloadCallBack implements DownloadCallBack

{

public void DoInPre()

{

dialog = new ProgressDialog(MainActivity.this);

dialog.setButton("取消", new DialogInterface.OnClickListener()

{

public void onClick(DialogInterface arg0, int arg1)

{

downloadPicture.cancel(true);

dialog.dismiss();

}

});

dialog.setCancelable(true);

dialog.setTitle("正在下载...");

dialog.setMessage("正在下载图片...");

dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

dialog.show();

}

public void Doing(int length , int max)

{

Log.i("输出", "Doing..." + length);

dialog.setMessage((int)((length/(float)max)*100) + "");

dialog.setProgress((int)((length/(float)max)*100));

}

public void DoInFinish(Bitmap bitmap)

{

dialog.dismiss();

if (bitmap != null)

{

imageView.setImageBitmap(bitmap);

}

}

大功告成,运行即可,下面是截图

b94af1a21b0eaf9bdbb82db8747bf8c8.png

0b1331709591d260c1c78e86d0c51c18.png

转载地址:http://lcevl.baihongyu.com/

你可能感兴趣的文章
查找当前目录下包含特定字符串的特殊后缀名的文件
查看>>
游戏运营杂谈之----->IB推荐算法
查看>>
分享34个超现实的iOS应用图标设计
查看>>
MySQLdb访问mysql的中文字符问题解决之道
查看>>
获取UITableViewCell中UITextField的值方法总结
查看>>
单线程写多线程读安全的结构体
查看>>
查看Linux 版本
查看>>
sqlserver 获取当前操作的数据库名称
查看>>
[每日一题] 11gOCP 1z0-052 :2013-09-19 创建用户...................................................B41...
查看>>
readline函数分析
查看>>
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(23)-权限管理系统-角色组模块...
查看>>
我在Facebook学到的10个经验
查看>>
【液晶模块系列基础视频】3.1.fatfs文件系统的移植及接口函数的使用
查看>>
科大讯飞2014公布会看点二:智能语音装进车载车机!
查看>>
利用光纤磁盘阵列实现存储共享(转)
查看>>
【读书笔记-数据挖掘概念与技术】分类:高级方法
查看>>
ED/EP系列1《简单介绍》
查看>>
oratop 各个指标项说明
查看>>
Android 手势识别类 ( 一 ) GestureDetector 基本介绍
查看>>
安装scapy遇到的问题
查看>>