我正在编写一个应用程序,我在其中一个一个下载 PDF 并在视图中显示它们。该视图有一个下一个按钮,onClick 显示 PDF(在上一次下一次单击时下载)并下载下一个 PDF,当再次单击下一个按钮时将显示下一个 PDF。我正在使用 AsyncTasks 下载文件。对于每个文件,我都有一个 AsyncTask 和一个 ProgressDialog。如果用户单击下一步按钮并且要显示的文件(应该在上一次单击时下载)仍在下载,我想显示进度条并等待下载完成。以下是我的代码片段..
public void saveFile(String uri, int index)
{
if(!f.exists())
{
Downloader downloader = new Downloader(f, index);
//adding the downloader to the list
downloaders.add(downloader);
downloader.execute(uri);
}
}
这是我显示 PDF 的方法
private void showPdf(){
[...]
if(!completed[to_show]){
downloaders.get(to_show).mProgressDialog.show();
}
[...]
}
这是我的 AsyncTask 代码
private class Downloader extends AsyncTask<String, Integer, String> {
ProgressDialog mProgressDialog;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
mProgressDialog.setIndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.show();
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
completed[fileNum] = true;
Log.e("PDFReaderAct",String.valueOf(fileNum)+" download complete");
mProgressDialog.dismiss();
}
public Downloader() {
[...]
mProgressDialog = new ProgressDialog(PDFReaderAct.this);
[...]
}
@Override
protected String doInBackground(String...params ) {
try
{
//Code to download the file
publishProgress((int) (total * 100 / fileLength));
os.write(bytes, 0, count);
}
[...]
}
}
@Override
protected void onProgressUpdate(final Integer... progress) {
super.onProgressUpdate(progress);
runOnUiThread( new Runnable() {
public void run() {
// TODO Auto-generated method stub
mProgressDialog.setProgress(progress[0]);
}
});
}
}
当我运行此代码时,会显示进度条,但在执行 showPdf() 方法之后。我正在跟踪每个文件下载的 AsyncTasks 和 progressDialogs。我怎样才能显示以前下载的进度..
谢谢,