Несколько входных параметров для метода execute() для AsyncTask

все. Я прочитал на сайте android описание excute() для AsyncTask:

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

Но в рамках моего проекта я прочитал код следующим образом:

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]);
}

Кто-нибудь может сказать мне, почему существуют 2 входных параметра для метода execute()?

Так как согласно спецификации должен быть только один входной параметр.

Спасибо заранее!

Ответы

Ответ 1

Прочитайте Params... params как Params[] params. Вы можете отправить столько параметров, сколько хотите.

Ответ 2

Вот как я получил это, чтобы передать несколько параметров. Вы могли бы это сделать, как описал Борис, но что, если вы проходите разные типы?

Сначала создайте свой AsyncTask как обычно, но внутри него создайте конструктор:

    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;
        }
    }

Теперь, на вашем мероприятии или что-то еще, когда вы хотите начать действие, вы вызываете свой AsyncTask и передаете столько параметров, сколько хотите.

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

Вы можете видеть, что вызов "StartTask" и передача параметров constuctor теперь назначают переменные в классе StartTask.