Android 异步任务和进度条

Android 异步任务和进度条,android,android-asynctask,android-progressbar,Android,Android Asynctask,Android Progressbar,我正在编写一个应用程序,其中我一个接一个地下载PDF并在视图中显示它们。 视图有一个“下一步”按钮,单击该按钮可显示PDF(在上一次单击时下载),并下载下一个PDF,再次单击“下一步”按钮时将显示该PDF。我正在使用异步任务下载文件。 对于每个文件,我有一个AsyncTask和一个ProgressDialog。 如果用户单击“下一步”按钮,并且要显示的文件(应该在上一次单击时下载)仍在下载,我希望显示progressbar并等待下载完成。以下是我的代码片段 public void saveFil

我正在编写一个应用程序,其中我一个接一个地下载PDF并在视图中显示它们。 视图有一个“下一步”按钮,单击该按钮可显示PDF(在上一次单击时下载),并下载下一个PDF,再次单击“下一步”按钮时将显示该PDF。我正在使用异步任务下载文件。 对于每个文件,我有一个AsyncTask和一个ProgressDialog。 如果用户单击“下一步”按钮,并且要显示的文件(应该在上一次单击时下载)仍在下载,我希望显示progressbar并等待下载完成。以下是我的代码片段

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();
              }
        [...]
}
这是我的异步任务代码

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]);
            }
        });

    }

    }
私有类下载程序扩展异步任务{
进程对话框;
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
super.onPreExecute();
mProgressDialog.setUndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_水平);
mProgressDialog.show();
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
已完成[fileNum]=真;
Log.e(“PDFReaderAct”,String.valueOf(fileNum)+“下载完成”);
mProgressDialog.disclose();
}
公共下载程序(){
[...]
mProgressDialog=newprogressdialog(PDFReaderAct.this);
[...]
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
尝试
{
//下载文件的代码
出版进度((整数)(总计*100/文件长度));
写入(字节,0,计数);
}
[...]   
}
}
@凌驾
受保护的void onProgressUpdate(最终整数…进度){
super.onProgressUpdate(进度);
runOnUiThread(新的Runnable(){
公开募捐{
//TODO自动生成的方法存根
mProgressDialog.setProgress(progress[0]);
}
});
}
}
当我运行这段代码时,progressbar会出现,但是在showPdf()方法执行之后。我将跟踪每个文件下载的AsyncTasks和progressDialogs。如何显示上一次下载的进度

谢谢,这里

private void showPdf(){

    [...]

     downloaders.get(to_show).mProgressDialog.show(); //<<get method of AsyncTask

    [...]
}
private void showPdf(){
[...]
downloaders.get(to_show).mProgressDialog.show();//此处

private void showPdf(){
[...]

downloaders.get(to_show).mProgressDialog.show();//明白了..我可以使用AsyncTask.get()使ui线程休眠方法,但我甚至想在此期间显示进度条..我可以这样做吗?@sampath:您有两个操作可以这样做:第一个操作是:在启动AsyncTask之前显示进度条,然后在onPostExecute方法中取消它。第二个操作是:在开始执行doInBackground之前使用onPreExecute显示进度条,就像您当前正在做的那样。是的..that显示下一个计划下载的进度。如果上一个仍在下载,我需要显示它的进度。谢谢,明白了。我可以使用AsyncTask.get()使ui线程休眠方法,但我甚至想在此期间显示进度条..我可以这样做吗?@sampath:您有两个操作可以这样做:第一个操作是:在启动AsyncTask之前显示进度条,然后在onPostExecute方法中取消它。第二个操作是:在开始执行doInBackground之前使用onPreExecute显示进度条,就像您当前正在做的那样。是的..that显示下一次计划下载的进度。如果上一次仍在下载,我需要显示其进度。谢谢,