当我调用我的 AsyncTask 时,doInBackground 会运行,但之后永远不会调用 onPostExecute。 Eclipse 没有提示 @Override
或 AsyncTask 中的任何参数,所以我不确定问题出在哪里。谁能告诉我问题出在哪里?
调用异步任务:
new AsyncDataFetcher(this).execute(productInfoUrls);
productInfoUrls
是一个 url 列表。
异步任务:
private static class AsyncDataFetcher extends AsyncTask<List<String>, Void, List<JSONObject>> {
Context context;
public AsyncDataFetcher(Context context) {
this.context = context;
}
@Override
protected List<JSONObject> doInBackground(List<String>... urls) {
List<JSONObject> jsonList = new ArrayList<JSONObject>();
JSONParser json_parse = new JSONParser();
for (int i = 0; i < urls[0].size(); i ++) {
jsonList.add(json_parse.getJSONFromUrl(urls[0].get(i)));
}
return jsonList;
}
@Override
protected void onPostExecute(List<JSONObject> jsonList) {
if(jsonList != null){
productInfoParser.Parse(jsonList);
loaded = true;
}
}
}
最佳答案
在您的异步任务结构中,一切看起来都很合适,但您在 doInBackground
中所做的事情可能需要很长时间!我怀疑您的应用正在启动 doInBackground
并且从未完成它。
我会添加一些调试日志以查看 json 获取的进展情况。
@Override
protected List<JSONObject> doInBackground(List<String>... urls) {
List<JSONObject> jsonList = new ArrayList<JSONObject>();
JSONParser json_parse = new JSONParser();
for (int i = 0; i < urls[0].size(); i ++) {
jsonList.add(json_parse.getJSONFromUrl(urls[0].get(i)));
Log.d(TAG, "added " + i);
}
Log.d(TAG, "returning jsonList");
return jsonList;
}
关于Android AsyncTask 不调用 onPostExecute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18305456/