Android AsyncTask没有调用onPostExecute。

5

当我调用AsyncTask时,doInBackground被执行,但是之后onPostExecute没有被调用。Eclipse没有抱怨AsyncTask中的@Override或任何参数,所以我不确定问题在哪里。有人能告诉我问题在哪里吗?

调用AsyncTask:

new AsyncDataFetcher(this).execute(productInfoUrls);

productInfoUrls 是一个URL列表。

AsyncTask:

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;
        }
    }
}

2
我建议您添加一些日志并检查您的logcat输出以查看发生了什么。 - Squonk
我之前错误地认为 i ++ 需要改成没有空格的 i++。但是我刚刚制作了一个测试应用程序,发现带有空格也可以正常工作。 - ObieMD5
不好的方式。:(。这段代码需要很长时间才能完成。您的jsonList为空。 - Luc
感谢您的输入。我添加了一个日志来检查,看起来jsonList不是null。 - Corey Wu
一个建议,你可以简单地传递 String...args 而不是 List<String> ...args。因为可变参数会做与 List 相同的事情。 - Swaroop
你解决了这个问题吗?我也遇到了同样的问题——doInBackground()返回了,但是onPostExecute()从未被调用。 - Kaworu
1个回答

2

你的异步任务结构看起来很合适,但是在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;
}

谢谢你的建议!我已经添加了日志,并在onPostExecute的开头添加了另一个日志。 “返回jsonList”被记录下来,但是onPostExecute开头的日志没有显示。似乎由于某种原因没有调用onPostExecute,尽管doInBackground已正确返回? - Corey Wu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接