Multiple input parameters for the method execute() of AsyncTask
Asked Answered
S

2

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!

Syringa answered 8/2, 2011 at 8:44 Comment(0)
E
13

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

Exclude answered 8/2, 2011 at 8:48 Comment(2)
how would one access the Params [] params when invoking doInBackground()?Diacid
got it: passing multiple doInBackground(String... params): task.execute(uri, username, password, etc...); getting: return Login.getResponseXML(params[0], params[1], params[2], etc...); duhDiacid
B
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.

Barlow answered 8/5, 2011 at 23:54 Comment(1)
Interesting stuff I must sayRuyle
E
13

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

Exclude answered 8/2, 2011 at 8:48 Comment(2)
how would one access the Params [] params when invoking doInBackground()?Diacid
got it: passing multiple doInBackground(String... params): task.execute(uri, username, password, etc...); getting: return Login.getResponseXML(params[0], params[1], params[2], etc...); duhDiacid

© 2022 - 2024 — McMap. All rights reserved.