如何为android添加doInBackground的第二个参数?

时间:2014-10-01 08:22:31

标签: android android-asynctask

我有一个asynctask工作正常,我想用一个参数(删除param2并运行),但一旦我尝试添加我收到的第二个参数:

  

令牌“param2”上的语法错误,此令牌后面的VariableDeclaratorId

说实话,我从未遇到过。

这个功能在下面(没有包含参数,因为我知道他们已经在其他功能中工作并且在单独使用时工作,但是作为一对......)我相信我可能会尝试不正确地添加它们? / p>

我是否需要将它们变成数组并将数组用作参数?如果是这样,我该怎么办呢? (仍然掌握了android的意思!)

我的功能

private class LoadList extends AsyncTask<String, Void, ArrayList<List>> {
    private Exception exception = null;
    /**
     * Main worker method
     */
    protected ArrayList<List> doInBackground(String... param1, param2) { 
        try {
            //Call web service
            return Utils.getWebService(getApplicationContext()).getListInfo(param1[0], param2[1]);
        } catch (Exception e) {
            exception = e;
            return null;
        }
    }
}

如果需要,请告诉我,谢谢!

4 个答案:

答案 0 :(得分:1)

有两种方法可以将变量传递给AsyncTask.doInBackground方法:

  • 使用它的varargs参数:String... param。调用execute方法时,可以向param添加许多值:

    LoadList loadistTask = new LoadList(); loadistTask.execute(new String[]{"my value","another value"});之后您将按照以下方式访问它们:param[0]param[1]

  • 另一种方法是创建自定义构造函数并将变量传递给它:

    LoadList loadistTask = new LoadList("my var here"); loadistTask.execute();

    private class LoadList extends AsyncTask<String, Void, ArrayList<List>> {
    private Exception exception = null;
    private String myVar;
    /**
    * constructor
    */
    public LoadList(String myVar) {
        this.myVar = myVar;
    }
    
    /**
     * Main worker method
     */
    protected ArrayList<List> doInBackground(String... param) {
        // this.myVar to access your var in the doInBackground method.
        try {
            //Call web service
            return Utils.getWebService(getApplicationContext()).getListInfo(param[0], param[1]);
        } catch (Exception e) {
            exception = e;
            return null;
        }
    }
    

答案 1 :(得分:0)

private class LoadList extends AsyncTask<String, Void, ArrayList<List>> {
private Exception exception = null;
/**
 * Main worker method
 */
protected ArrayList<List> doInBackground(String... param) { 
    try {
        //Call web service
        return Utils.getWebService(getApplicationContext()).getListInfo(param[0], param[1]);
    } catch (Exception e) {
        exception = e;
        return null;
    }
}

试试这个

答案 2 :(得分:0)

您只需要传递一个String数组。

段:

的AsyncTask:

private class LoadList extends AsyncTask<String, Void, ArrayList<List>> {
    private Exception exception = null;
    /**
     * Main worker method
     */
    protected ArrayList<List> doInBackground(String... params) { 
        try {
            //Call web service
            return Utils.getWebService(getApplicationContext()).getListInfo(param1[0], param2[1]);
        } catch (Exception e) {
            exception = e;
            return null;
        }
    }
}

将其命名为:

LoadList loadistTask = new LoadList();
loadistTask.execute(new String[]{"value 1","value 2"});

希望这有帮助。

答案 3 :(得分:0)

只需使用多个参数调用AsyncTask,如下所示:

new LoadList().execute("value 1", "value 2")

问题是String... param参数可以处理任意数量的参数并将它们捆绑在一个数组中。请参阅Mahesh关于如何使用它们的答案。如果在使用String... param之后添加另一个参数,则编译器不知道何时将调用的变量赋值给该参数。

所以你在Java技术上可以做的是foo(String a, String b, String... c),但你不能foo(String a, String... b, String c)

但是,在您的情况下,由于doInBackground(String... param)是预定义的方法签名,因此您无法添加更多参数,因为框架无法调用它。