2013-08-19 21 views
5

AsyncTask'ımı aradığımda, doInBackground çalıştırılıyor, ancak onPostExecute daha sonra hiç çağrılmıyor. Eclipse, @Override s veya AsyncTask'taki herhangi bir parametreden şikayet etmiyor, bu yüzden sorunun ne olduğundan emin değilim. Kimse sorunun ne olduğunu söyleyebilir mi?Android AsyncTask arayamıyor onPostExecute

çağrılması AsyncTask:

new AsyncDataFetcher(this).execute(productInfoUrls); 

productInfoUrls url'lerin listesidir.

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

Biraz günlüğe ekleme eklemenizi ve neler olup bittiğini görmek için logcat çıktınızı kontrol etmenizi öneririm. – Squonk

+0

de uzay olmadan "i ++" olması gereken 'i ++ konusunda yanıldım. Sadece test uygulamasını yaptım ve alanla iyi çalışıyor. – ObieMD5

+0

Kötü yol. :(. Bu kodun yapılması uzun bir zaman alır. JsonList öğeniz boştur. – Luc

cevap

2

her şey zaman uyumsuz görev yapısına uygun görünüyor, ama ne doInBackground yaptığını sonsuza dek sürebilir! Uygulamanızın doInBackground başlayıp hiç bitmeyeceğini sanıyorum.

Json'un nasıl ilerlediğini görmek için bazı hata ayıklama günlükleri eklerim.

@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

Tavsiyeleriniz için teşekkürler: 'onPostExecute' başlangıcına günlükleri ve ek bir günlük ekledim. "JsonList döndürme" günlüğe kaydedilir, ancak "onPostExecute" öğesinin başlangıcındaki günlük görüntülenmez. Görünüşe göre 'onPostExecute 'doInBackground' doğru bir şekilde dönmesine rağmen, bazı nedenlerden dolayı çağrılmıyor? –