2013-08-19 370 views
5

當我打電話給我的AsyncTask時,doInBackground運行,但onPostExecute從未被調用。 Eclipse並不是在抱怨@Override或AsyncTask中的任何參數,所以我不確定問題是什麼。誰能告訴我問題是什麼?Android AsyncTask not calling onPostExecute

調用的AsyncTask:

new AsyncDataFetcher(this).execute(productInfoUrls); 

productInfoUrls是一個網址列表。

的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

+0

我錯了'i ++'需要'i ++'沒有空格。只是做了測試應用程序,並與空間工作良好。 – ObieMD5

+0

不好的方法。 :(。這段代碼需要很長時間才能完成。你的jsonList爲空。 – Luc

回答

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

感謝您的建議!我在'onPostExecute'的開頭添加了日誌和附加日誌。「returned jsonList」已記錄,但'onPostExecute'開頭的日誌不顯示。 看起來'onPostExecute '因爲某種原因沒有調用,儘管'doInBackground'返回正確? –