1

我正在构建一个 android 应用程序,我需要在其中下载 pdf 然后查看它。我的下载和查看代码工作正常。我决定使用 Asynctask 来下载并显示进度。但是,当它启动时,系统似乎已冻结,并且直到文件下载后才会出现对话框。这是我的 onClick 代码:

public void onClick(View v) {
    DownloadFile downloadFile = new DownloadFile();
    downloadFile.execute(
            "http://store.aqa.org.uk/qual/newgcse/pdf/AQA-4130-W-SP.PDF",
            "userguide.pdf");
    try {
        downloadFile.get();
        viewPDF(getExternalFilesDir(null) + "/userguide.pdf");
    } catch (Exception e) {
    }
}

知道如何解决这个问题。

我考虑过可以将 viewPdf 放在 onPostExecute 方法中,但此方法专门用于下载文件,这是必须查看 pdf 的特殊情况。

提前致谢

编辑:我解决了我的问题。

我添加了一个参数,我将在其中指定请求的。这包含在结果中并取决于它,它可能会显示或不显示。感谢所有的帮助

4

2 回答 2

1

正如医生所说

AsyncTask.html.get() :

如有必要,最多等待给定时间以完成计算,然后检索其结果。

意味着如果您调用 get 方法从 AsyncTask 获取结果,这将在 UI 线程中等待,直到从 AsyncTask doInBackground 方法返回控制。

您可以通过将当前活动上下文传递给 DownloadFile 来解决当前问题,以便将方法从 Activity 访问到 onPostExecute 方法,如下所示:

private class DownloadFile extends AsyncTask<String, Void, String> {

Context context;

public DownloadFile(Context context){
this.context=context;
}
 @Override
   protected void onPreExecute() {
   }
      @Override
      protected String doInBackground(String... params) {
            // put your PDf downloading related code here
            return null;
      }      

      @Override
      protected void onPostExecute(String result) {

        // Access Activity method here using context;
         context.viewPDF(getExternalFilesDir(null) + "/userguide.pdf");      
      }

}

DownloadFile并从 Activity执行Button click :

public void onClick(View v) {
    DownloadFile downloadFile = new DownloadFile(Current_Activity.this);
    downloadFile.execute(
       "http://store.aqa.org.uk/qual/newgcse/pdf/AQA-4130-W-SP.PDF",
       "userguide.pdf");
}
于 2013-01-28T16:50:37.317 回答
0

这样做的快速方法:

public void onClick(View v) {
    DownloadFile downloadFile = new DownloadFile() {
        @Override
        public void onPostExecute(Void result) {
            super.onPostExecute(result);
            viewPDF(getExternalFilesDir(null) + "/userguide.pdf");
        }
    };
    downloadFile.execute(
            "http://store.aqa.org.uk/qual/newgcse/pdf/AQA-4130-W-SP.PDF",
            "userguide.pdf");
}

这称为匿名类。它仅针对此实例覆盖来自 DownloadFile 的 onPostExecute。

于 2013-01-28T17:01:22.680 回答