Android:我如何传递参数给AsyncTask的onPreExecute()?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (35)

我使用一个AsyncTask加载操作,作为内部类实现。

onPreExecute()我显示一个加载对话框,然后我再次隐藏onPostExecute()。但对于我事先知道的一些加载操作,他们会很快完成,因此我不想显示加载对话框。

我想通过一个布尔参数来表明这一点,我可以传递给它,onPreExecute()但显然由于某种原因onPreExecute()不采取任何参数。

有什么更好的方法吗?

提问于
用户回答回答于

你可以重写构造函数。就像下面这样:

private class MyAsyncTask extends AsyncTask<Void, Void, Void> {

    public MyAsyncTask(boolean showLoading) {
        super();
        // do stuff
    }

    // doInBackground() et al.
}

然后,在调用任务时,请执行以下操作:

new MyAsyncTask(true).execute(maybe_other_params);

比较上面的代码后用下面的代码:

MyAsyncTask task = new MyAsyncTask();
task.showLoading = false;
task.execute();
用户回答回答于

对我来说,将参数传递给异步任务的最简单方法就是这样:

// To call the async task do it like this
Boolean[] myTaskParams = { true, true, true };
myAsyncTask = new myAsyncTask ().execute(myTaskParams);

声明并使用像这样的异步任务:

private class myAsyncTask extends AsyncTask<Boolean, Void, Void> {

    @Override
    protected Void doInBackground(Boolean...pParams) 
    {
        Boolean param1, param2, param3;

        //

          param1=pParams[0];    
          param2=pParams[1];
          param3=pParams[2];    
      ....
}                           

你可能需要继承异步任务以在构造函数中传递初始化参数:

 /* Generic Async Task    */
interface MyGenericMethod {
    int execute(String param);
}

protected class testtask extends AsyncTask<MyGenericMethod, Void, Void>
{
    public String mParam;                           // member variable to parameterize the function
    @Override
    protected Void doInBackground(MyGenericMethod... params) {
        //  do something here
        params[0].execute("Myparameter");
        return null;
    }       
}

// to start the asynctask do something like that
public void startAsyncTask()
{
    // 
    AsyncTask<MyGenericMethod, Void, Void>  mytest = new testtask().execute(new MyGenericMethod() {
        public int execute(String param) {
            //body
            return 1;
        }
    });     
}

扫码关注云+社区