我有如下对象设置,并将信息传递给异步任务:
DynamoDBManager.CoreInfo passCoreInfo = new DynamoDBManager.CoreInfo();
passCoreInfo.setId(1);
passCoreInfo.setAttr("C3P0");
passCoreInfo.setMethodCallType("Get Info");
new DynamoDBManagerTask()
.execute(passCoreInfo);
然而,尽管作为一个对象传入它然后以某种方式转换为CoreInfo [],但返回期望CoreInfo根据我的错误。我已经尝试将doInBackground和AsyncTask的返回类型更改为ArrayList,因此它期望一个数组,但它仍然期望CoreInfo而不是return coreInfo
行的CoreInfo []。
private class DynamoDBManagerTask extends
AsyncTask<DynamoDBManager.CoreInfo, Void, DynamoDBManager.CoreInfo> {
List<DynamoDBManager.Info1> info1Result = new ArrayList<DynamoDBManager.Info1>();
List<DynamoDBManager.Info2> info2Result = new ArrayList<DynamoDBManager.Info2>();
protected DynamoDBManager.CoreInfo doInBackground(
DynamoDBManager.CoreInfo... coreInfo) {
//If coreInfo[0].getMethodCallType.equals("Get Info"), info1Result = call DynamoDB query 1
//Else info2Result = call DynamoDB query 2
return coreInfo; // Should remain untouched, same info as when passed in
}
@Override
protected void onPostExecute(DynamoDBManager.CoreInfo coreInfo) {
//If coreInfo[0].getMethodCallType.equals("Get Info"), save info1Result to SQLite table 1
//Else save info2Result to SQLite table2
}
}
如何修复代码以使类型对齐?并且它不会抛出Required:CoreInfo Found:CoreInfo []错误?
答案 0 :(得分:2)
参数DynamoDBManager.CoreInfo...
是一个varargs参数,这意味着您可以将多个CoreInfo
对象作为单独的参数传递,并将它们转换为数组。您必须返回该数组的元素,例如coreInfo[0]
答案 1 :(得分:1)
您可以执行return coreInfo[0]
但是,如果你永远不改变coreInfo
通过它的理由是什么?将其保留在AsyncTask
之外或AsyncTask
答案 2 :(得分:0)
请注意...
方法签名中的三个点(doInBackground
)。那你的参数将被转换为数组。
作为示例,请使用以下代码并注意代码下方控制台输出中的差异:
package box.sand;
public class Main {
public static void main(String[] args) {
printStrings("foo", "bar");
printStrings("baz");
printStringsLooped("foo", "bar");
printStringsLooped("baz");
}
public static void printStrings(String... strings) {
System.out.println(strings);
}
public static void printStringsLooped(String... strings) {
for (String s : strings) {
System.out.println(s);
}
}
}
控制台输出:
[Ljava.lang.String;@5c3a5635
[Ljava.lang.String;@79f1e0e0
foo
bar
foo
如果您确定只有一个对象将被传递到&#39; doInBackground&#39;,您只需返回数组的第一个对象(即return coreInfo[0]
)。