android AsyncTask异步下载并更新进度条

AsyncTask异步下载并更新进度条
 
 //如果不是很明白请看上篇文章的异步下载
AsyncTask<String, Integer, String>  

第一个参数:String 传入的是需要下载的地址

第二个参数:Integer 是进度条的进度 

第三个参数:String 下载后的结果,如果您下载的是一张图片,可以将它改成BitMap

示例代码如下:

package com.example.testcctv;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import org.apache.http.HttpStatus;

import android.os.AsyncTask;
import android.util.Log;
import android.widget.ProgressBar;

/*****************************************************************************************************************************************
 * 异步线程下载类 参数说明: 第一个参数:String 传入的是需要下载的地址 第二个参数:Integer 是进度条的进度 第三个参数:String
 * 下载后的结果,如果您下载的是一张图片,可以将它改成BitMap
 *****************************************************************************************************************************************/
public class DownloadAsyncTask extends AsyncTask<String, Integer, String> {

	private final ProgressBar bar;
	private int count = 0;

	public DownloadAsyncTask(ProgressBar bar) {
		super();
		this.bar = bar;
	}

	@Override
	protected String doInBackground(String... params) {
		try {
			URL url = new URL(params[0]);
			HttpURLConnection connection = (HttpURLConnection) url
					.openConnection();
			connection.setConnectTimeout(10 * 1000);
			connection.connect();
			if (connection.getResponseCode() == HttpStatus.SC_OK) {
				bar.setMax(connection.getContentLength());
				File file = new File(params[1]);
				file.createNewFile();
				InputStream inputStream = connection.getInputStream();
				ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
				byte[] buffer = new byte[10 * 1024];
				while (true) {
					int len = inputStream.read(buffer);
					publishProgress(len);
					if (len == -1) {
						break;
					}
					arrayOutputStream.write(buffer, 0, len);
				}
				arrayOutputStream.close();
				inputStream.close();

				byte[] data = arrayOutputStream.toByteArray();
				FileOutputStream fileOutputStream = new FileOutputStream(file);
				fileOutputStream.write(data);
				fileOutputStream.close();
			}

		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return "下载完成";
	}

	@Override
	protected void onCancelled() {
		// TODO Auto-generated method stub
		super.onCancelled();
	}

	@Override
	protected void onPostExecute(String result) {
		Log.v("Fover", result);
		super.onPostExecute(result);
	}

	@Override
	protected void onPreExecute() {
		// TODO Auto-generated method stub
		super.onPreExecute();
	}

	@Override
	protected void onProgressUpdate(Integer... values) {
		count += values[0];
		bar.setProgress(count);
		super.onProgressUpdate(values);
	}

}

使用方法: 

//第一个值是下载地址,第二个值是保存地址
				String[] downLoadPath = {
						HTTPURL,
						Environment.getExternalStorageDirectory()
								+ "/dujinyang/dudu.apk" };
				DownloadAsyncTask asynTask = new DownloadAsyncTask(progressBar);
				asynTask.execute(downLoadPath);
时间: 2025-01-07 03:38:45

android AsyncTask异步下载并更新进度条的相关文章

Handler实现线程之间的通信下载文件动态更新进度条

1. 原理 每一个线程对应一个消息队列MessageQueue,实现线程之间的通信,可通过Handler对象将数据装进Message中,再将消息加入消息队列,而后线程会依次处理消息队列中的消息. 2. Message 初始化:一般使用Message.obtain()方法获取一个消息对象,该方法会检查Message对象池中是否存在可重复利用的对象,若无,才会new一个新对象. what:相当于Message的标识符,区别于其它消息. arg1.arg2:int类型,可传递整数. obj:objec

android用的handler更新进度条但是显示不出来并且进度条的高不能改总是那么高

问题描述 android用的handler更新进度条但是显示不出来并且进度条的高不能改总是那么高 xml文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layo

Android仿水波纹流量球进度条控制器_Android

仿水波纹流球进度条控制器,Android实现高端大气的主流特效,供大家参考,具体内容如下 效果图: CircleView 这里主要是实现中心圆以及水波特效 package com.lgl.circleview; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.gra

Android仿水波纹流量球进度条控制器

仿水波纹流球进度条控制器,Android实现高端大气的主流特效,供大家参考,具体内容如下 效果图: CircleView 这里主要是实现中心圆以及水波特效 package com.lgl.circleview; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.gra

Android实现为Notification加上一个进度条的方法_Android

本文实例讲述了Android实现为Notification加上一个进度条的方法.分享给大家供大家参考,具体如下: package com.notification; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Intent;

Android开发之ProgressBar字体随着进度条的加载而滚动

在网上翻阅了很多关于ProgressBar滚动效果,但是始终没有找到适合项目中的这种效果,故自己写这篇文章,记录一下写作过程,给大家做一个参考.先看下最终效果效果图 我这里用的是LICEcap软件录制的gif图,效果有点掉帧,哪位仁兄有比较好的录制gif的软件烦请相告,小弟在此先行谢过. 首先看下xml代码,只有两个系统控件,一个TextView和一个ProgressBar,Button只是为了方便触发进度条的效果,实际项目中可以根据需求来做.首先看下xml中的代码: <?xml version

Android实现为Notification加上一个进度条的方法

本文实例讲述了Android实现为Notification加上一个进度条的方法.分享给大家供大家参考,具体如下: package com.notification; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Intent;

服务器-我这样做asp.net异步文件上传进度条

问题描述 我这样做asp.net异步文件上传进度条 前台两个请求 1.上传文件的请求 2.获取上传进度的请求 1. $("#ufrm").ajaxSubmit({ url: "ReceivFile.ashx", type: "post", success: function (data) { ... 2. $.ajax({ type: "post", url: "Filepro.aspx", data: {

更新进度条C语言实现

受了李大神这篇文章的启发:http://blog.csdn.net/absurd/article/details/761943 于是我也自己亲手实现了一个简易版本的更新进度条,只要传入一个大于100的整型数即可. #include <stdio.h> #include <Windows.h> #include <unistd.h> //定义设置光标结构体变量 CONSOLE_CURSOR_INFO cci; //定义默认的坐标位置 COORD pos = {0,0};