【发布时间】:2012-01-26 15:33:06
【问题描述】:
在完成 AsyncTask 后,我有 6 种不同类型的 List 结果。并且List 结果应该返回到Activity。例如:List<A>、List<B>、List<C>、List<D>、List<E>,最后是List<F>。
这是我的AsyncTask:
public class myAsync extends AsyncTask<String, String, List> {
private List resultList;
@Override
protected List doInBackground(String... params) {
//params[0] is url
//params[1] is type
callAPI api = new callAPI(params[0], params[1]);
// According to type api decides type of List and generates
return api.getJSON(); // returns a List which already parse JSON
}
@Override
protected void onPostExecute(List result) {
// Result is here now, may be 6 different List type.
this.resultList = result
}
// returns result
public List getResultList() { return this.resultList; }
}
我会这样调用 AsyncTask:
myAsync task = new myAsync();
task.execute(params);
List myList = task.getResultList(); // type is uncertain
Log.d("Tag", Integer.toString(myList.size());
你知道,我必须指出标签之间的返回类型(Result)。如果我为List 选择特定类型,则它不适用于其他类型。
确实,我已经尝试返回 List<Object> 并且只返回 List 类型。但是没有用。
我不想使用 6 个不同的Async。是否可以仅使用AsyncTask 解决此问题?我想我需要匿名列表或类似的东西不确定。谁能解释一下?
【问题讨论】:
-
你可以忽略,它不会出错,它只是警告你。
-
你的意思是我应该使用这个定义:
AsyncTask<String, String, List>。如果是,返回类型是什么?我已经将所有类型作为普通列表返回,出现 NullException 错误。 -
onpostexecute 应该在您的其他线程中设置您的列表,而不是使用 getter 方法。你怎么知道列表是否完成?您必须使用 getter 方法进行轮询。你可以做一个异步,只保留一个结果列表。
-
在这里发布堆栈跟踪,我怀疑你得到的 NullPointer 可能来自其他地方。
-
Marvin 的回答解释了 NullPointer,但不确定如何检查状态。
标签: java android android-asynctask