Android Asynctask检查状态(已完成)

时间:2014-08-29 08:47:02

标签: android multithreading arraylist android-asynctask

我正在开发一个AsyncTask类。我试着解析Json并展示它。一切都很好,但我有一个问题。我想检查我的Asynctask类的状态。我的意思是我想检查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何时完成? 我怎样才能解决我的问题?如果有人知道解决方案,请帮助我

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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);
    }
}