您的位置:首页 > 移动开发 > Android开发

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

2013-06-18 15:55 411 查看
AsyncTask异步下载并更新进度条//如果不是很明白请看上篇文章的异步下载AsyncTask<String,Integer,String>

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

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

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

示例代码如下:

packagecom.example.testcctv;

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

importorg.apache.http.HttpStatus;

importandroid.os.AsyncTask;
importandroid.util.Log;
importandroid.widget.ProgressBar;

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

privatefinalProgressBarbar;
privateintcount=0;

publicDownloadAsyncTask(ProgressBarbar){
super();
this.bar=bar;
}

@Override
protectedStringdoInBackground(String...params){
try{
URLurl=newURL(params[0]);
HttpURLConnectionconnection=(HttpURLConnection)url
.openConnection();
connection.setConnectTimeout(10*1000);
connection.connect();
if(connection.getResponseCode()==HttpStatus.SC_OK){
bar.setMax(connection.getContentLength());
Filefile=newFile(params[1]);
file.createNewFile();
InputStreaminputStream=connection.getInputStream();
ByteArrayOutputStreamarrayOutputStream=newByteArrayOutputStream();
byte[]buffer=newbyte[10*1024];
while(true){
intlen=inputStream.read(buffer);
publishProgress(len);
if(len==-1){
break;
}
arrayOutputStream.write(buffer,0,len);
}
arrayOutputStream.close();
inputStream.close();

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

}catch(MalformedURLExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
return"下载完成";
}

@Override
protectedvoidonCancelled(){
//TODOAuto-generatedmethodstub
super.onCancelled();
}

@Override
protectedvoidonPostExecute(Stringresult){
Log.v("Fover",result);
super.onPostExecute(result);
}

@Override
protectedvoidonPreExecute(){
//TODOAuto-generatedmethodstub
super.onPreExecute();
}

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

}

使用方法:

//第一个值是下载地址,第二个值是保存地址
String[]downLoadPath={
HTTPURL,
Environment.getExternalStorageDirectory()
+"/dujinyang/dudu.apk"};
DownloadAsyncTaskasynTask=newDownloadAsyncTask(progressBar);
asynTask.execute(downLoadPath);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: