Несколько входных параметров для метода execute () AsyncTask - PullRequest
12 голосов
/ 08 февраля 2011

все. Я прочитал на сайте 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 () ?

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

Заранее спасибо!

Ответы [ 2 ]

44 голосов
/ 09 мая 2011

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

Сначала создайте 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» и передача параметров конструктора теперь будут назначать переменные в классе StartTask.

13 голосов
/ 08 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...