我有一个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;
}
}
}
如果需要,请告诉我,谢谢!
答案 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)
是预定义的方法签名,因此您无法添加更多参数,因为框架无法调用它。