2014-08-29 136 views
-3

我正在开发一个AsyncTask类。我试图解析Json并展示它。一切都很好,但我有一个问题。我想检查我的Asynctask类的状态。我的意思是我想检查AsyncTask何时完成。Android Asynctask检查状态(已完成)

这是我的代码:

private class LoadItemFromServer extends AsyncTask<String, Void, String> { 

    ProgressDialog pDialog; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     pDialog = new ProgressDialog(getActivity()); 
     pDialog.setMessage("Loading..."); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 

     try { 


       JsonResult = FlashScreen 
         .execute(
           "***************", 
           FlashScreen.CreateJson(
             "GetCategoryHierharchy", "eng")); 




     } catch (Exception e) { 

     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 

     if (pDialog != null) { 
      pDialog.dismiss(); 

      pDialog = null; 
     } 

     Log.e("serverrrr", JsonResult); 
     try { 
      ParseJsonFromServer(JsonResult); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

} 



public void ParseJsonFromServer(String server) throws JSONException { 
    JSONArray jsonArray = null; 
    JSONObject mainJson = new JSONObject(server); 
    jsonArray = mainJson.getJSONArray("result"); 

    for (int i = 0; i < jsonArray.length(); i++) { 
     JSONObject data = jsonArray.getJSONObject(i).getJSONObject("data"); 

     Azercell_PagerTitleStrip_items objItem = new Azercell_PagerTitleStrip_items(); 

     objItem.setTitle(data.getString("title")); 
     Log.e("titlesss", data.getString("title")); 
     arrayOfList.add(objItem); 
    } 

} 

我的问题是关于这一部分:

loaditem = new LoadItemFromServer(); 

    loaditem.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
    try { 
     if (loaditem.getStatus() == AsyncTask.Status.FINISHED) { 
      for (int i = 0; i < arrayOfList.size(); i++) { 
       page = inflater.inflate(R.layout.azercell_category_pages, null); 
       // setAdapterToListview(page); 
       titles.add(arrayOfList.get(i).getTitle()); 
       pages.add(page); 
      } 
     } else { 
      Log.e("asynctask status", "not finished"); 
     } 
    } catch (Exception e) { 
    } 

此刻我arrayOfList数组的大小为0,但我登录ParseJsonFromServer和数组的大小不是0. 我不能等待,AsyncTask何时完成? 我该如何解决我的问题?如果有人知道一个解决方案,请大家帮我

回答

0

把你的这部分代码:

for (int i = 0; i < arrayOfList.size(); i++) { 
    page = inflater.inflate(R.layout.azercell_category_pages, null); 
    // setAdapterToListview(page); 
    titles.add(arrayOfList.get(i).getTitle()); 
    pages.add(page); 
} 

在年底你的ParseJsonFromServer方法。 (也可以尝试来改善下方的编码)

public void ParseJsonFromServer(String server) throws JSONException { 
    JSONArray jsonArray = null; 
    JSONObject mainJson = new JSONObject(server); 
    jsonArray = mainJson.getJSONArray("result"); 

    for (int i = 0; i < jsonArray.length(); i++) { 
     JSONObject data = jsonArray.getJSONObject(i).getJSONObject("data"); 

     Azercell_PagerTitleStrip_items objItem = new Azercell_PagerTitleStrip_items(); 

     objItem.setTitle(data.getString("title")); 
     Log.e("titlesss", data.getString("title")); 
     arrayOfList.add(objItem); 
    } 

    for (int i = 0; i < arrayOfList.size(); i++) { 
     page = inflater.inflate(R.layout.azercell_category_pages, null); 
     // setAdapterToListview(page); 
     titles.add(arrayOfList.get(i).getTitle()); 
     pages.add(page); 
    } 
} 
+0

谢谢你工作完美 – BekaKK 2014-08-29 09:46:25

0

当你onPostExecute()方法被调用就意味着你的执行已经完成

+0

是的,我知道,但我怎么能写我的内部onPostExecute()函数?我添加的视图的,如果有任何问题,我的功能 – BekaKK 2014-08-29 08:56:47

+0

里面做onPostExecute您的编码()请看你的完整代码 – Dhananjay 2014-08-29 09:00:27

+0

看@Cryzy,我的函数必须在onCreateView中调用。我尝试动态添加视图(这工作),但我的数组的大小为0。我不能等待,而asynctask完成 – BekaKK 2014-08-29 09:05:55