我有一个由AsyncTask
管理的进度条,可以从互联网上下载一些文件。
private class DownloadImgs extends AsyncTask<Void, String, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(progress_bar_type);
}
@Override
protected Void doInBackground(Void ...params) {
for(GetCountry gc : listCountry){
getdownloadedFiles(gc.getUrl());}
return null;
}
protected void onProgressUpdate(String... progress) {
pDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(Void result) {
dismissDialog(progress_bar_type);
}
允许我下载文件的方法:
public void getdownloadedFiles(String url)
{
int count;
try {
URL urlImg = new URL(url);
URLConnection connection = urlImg.openConnection();
connection.connect();
int lenghtOfFile = connection.getContentLength();
InputStream input = new BufferedInputStream(urlImg.openStream(), 8192);
OutputStream output = new FileOutputStream(folder+"/"+name);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress(""+(int)((total*100)/lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {
e.getMessage();
}
}
此代码运行良好,但问题是每个下载的文件都有自己的进度条 我只想为所有下载的文件添加一个进度条。
我怎样才能做到这一点? 非常感谢你
答案 0 :(得分:0)
将多个网址传递给您的异步任务。
new DownloadImgs().execute(URL1,URL2,URL3);
它会将整个进度显示为单个进度条。
答案 1 :(得分:0)
在doInBackground()
方法中,只需在AsyncTask
的单次执行中循环浏览需要下载的文件列表。您还应该利用execute()
的varargs性质来传递您需要下载的URL列表。换句话说,接近这个:
DownloadImgs task = new DownloadImgs();
task.execute(url1, url2, url3, url4, url5);
修改任务:
private class DownloadImgs extends AsyncTask<String, String, Void> {
@Override
protected Void doInBackground(String ...params) {
for (String url : params) {
getdownloadedFiles(url);
}
return null;
}
public void getdownloadedFiles(String url) {
/* Existing code */
}
/* Other methods unchanged */
}
修改强>
您可以使用一种方法将所有文件下载显示为单个连续进度指示器,只需按文件计数而不是文件内容更新进度。换句话说,如果您有5个文件publishProgress()
,其值为20(1 * 100/5),40(2 * 100/5),60(3 * 100/5),80(4 * 100) / 5),每个文件下载结束时100(5 * 100/5)。
如果您需要更精细的内容而无需预先获取每个文件的内容长度,请使用百分比增加每个块增量。请注意,您还可以将setMax()
的进度条的最大级别设置为100以外的值,以便更轻松地使用数学运算。在相同的5个文件示例中,您可以将进度条最大值设置为500,并且对于每次下载,您仍将以与现在相同的方式将100添加到总数中,但是在每次下载开始时总数不会重置