12

everyone. I have read on the android site the description of the excute() of AsyncTask:

public final AsyncTask<Params, Progress, Result> execute (Params... params)

But within my project, I have read the code like this:

private static final int JSON = 0;
private static final int NAME = 1;
@Override
protected String doInBackground(String... strData) {    
       FileOutputTask task = new FileOutputTask(context);
       task.execute(strData[JSON], strData[NAME]);
}

Somebody can tell me why there are 2 input parameters for the execute() method?

Since according the specification, there should be only one input parameter.

Thanks in advance!

Harry Johnston
  • 35,639
  • 6
  • 68
  • 158
Mathieu
  • 1,491
  • 5
  • 17
  • 37

2 Answers2

44

Here is how I got it to pass multiple parameters. You could do it as Boris described, but what if you pass different types?

First, create your AsyncTask as normal, but within it, create a constructor:

    private class StartTask extends AsyncTask<Context, Void, Boolean> 
    {
        private ProgressDialog progress;
        private String strAction="";

        public StartTask(ProgressDialog progress, String Action)
        {
            this.progress = progress;
            this.strAction = Action;
        }
    }

Now, on your event or anything else, when you want to kick off the action you call your AsyncTask and pass as many parameters as you want.

    ProgressDialog progress = new ProgressDialog(this);
    progress.setMessage("Loading...");
    String strAction = "this_is_a_string";
    new StartTask(progress, strAction).execute(this);

You can see that calling "StartTask" and passing the constuctor parameters will now assign the variables within the StartTask class.

Antebios
  • 1,681
  • 1
  • 13
  • 22
13

Read Params... params as Params[] params. You can send as many params as you want.

Boris Pavlović
  • 63,078
  • 28
  • 122
  • 148
  • how would one access the Params [] params when invoking doInBackground()? – Cole Mar 14 '11 at 21:19
  • 3
    got it: passing multiple doInBackground(String... params): task.execute(uri, username, password, etc...); getting: return Login.getResponseXML(params[0], params[1], params[2], etc...); duh – Cole Mar 14 '11 at 22:35