在AsyncTask Android中下载进度

3

我正在尝试创建下载进度。我有一个继承自AsyncTask的类: public class DownloadFileTask extends AsyncTask

当下载开始时,我想创建进度:

  @Override
  protected void onPreExecute() {



   progressDialog = new ProgressDialog(whatContext);
   progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
   progressDialog.setMessage("Loading...");
   progressDialog.setCancelable(false);
   progressDialog.show();
  }

但是我不知道应该为新的ProgressDialog提供什么上下文,因为我不在Activity类中。我尝试提供一些上下文,但出现了错误:

在此范围内无法访问Main_Tab类型的任何封闭实例

那么我该如何创建这个进度条呢?

另外我想在这个类之外创建进度条(因为我想要分离函数和设计),但我还没有想出如何做到这点。

谢谢大家的帮助。


1
"我不在Activity类中。" - 为什么?AsyncTask 的主要用途是允许异步处理,而不会阻塞 Activity。如果您正在以其他方式创建 AsyncTask,那么也许您需要重新考虑您需要做什么。 - Squonk
3个回答

3
 public class DownloadFileTask extends AsyncTask{
Context mContext;

    public DownloadFileTask(Context context) {
            this.mContext = context;

        }


     @Override
      protected void onPreExecute() {



       progressDialog = new ProgressDialog(mContext);
       progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
       progressDialog.setMessage("Loading...");
       progressDialog.setCancelable(false);
       progressDialog.show();
      }
    }

要启动DownloadTask,需按以下方式调用:

 DownloadFileTask task = new DownloadFileTask(MyActivity.This);
 task.execute();

2

你应该为你的AsyncTask创建一个构造函数,它需要一个Context对象作为参数,例如:

public DownloadFileTask(Context context) {
    this.context = context;
}

然后您可以使用 context 字段来初始化 ProgressDialog。关于第二个问题 - 没有足够的信息来回答它。希望这可以帮到您。


0

我想将上下文传递到您自定义的AsyncTask Loader构造函数中可以解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接