AsyncTask的execute()方法需要多个输入参数。

12

大家好。我在Android网站上读到了AsyncTask的execute()方法的描述:

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

请问为什么execute()方法有两个输入参数?根据规范,这个方法应该只有一个输入参数。

提前感谢您的回答!

2个回答

44

以下是我如何使多个参数通过,你可以按照Boris的描述来实现,但如果你传递不同类型会怎样呢?

首先,像平常一样创建你的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"类内部。

有趣的东西,我必须说 - kirtan403

13

Params... params读作Params[] params。您可以发送任意数量的参数。


在调用doInBackground()时,如何访问Params[] params? - Cole
3
明白:在执行task.execute(uri, username, password, etc...)时,会调用多个doInBackground(String... params)方法。在返回结果时,会调用Login.getResponseXML(params[0], params[1], params[2], etc...)方法来获取响应的XML内容。"duh"可能是表达一种显而易见或者无聊的感叹。 - Cole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接