【问题标题】:Android Asynctask check status(finished)Android Asynctask 检查状态(已完成)
【发布时间】:2014-08-29 08:47:01
【问题描述】:

我正在研究 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 什么时候完成? 我该如何解决我的问题?如果有人知道解决方案,请帮助我

【问题讨论】:

    标签: android multithreading arraylist android-asynctask


    【解决方案1】:

    获取这部分代码:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 是的,我知道,但是我如何在 onPostExecute() 中编写我的 for 函数?我在我的 for 函数中添加了视图
      • 如果有任何问题,请在 onPostExecute() 中进行编码请出示您的完整代码
      • 看@Cryzy,我的for函数必须在onCreateView中调用。我尝试动态添加视图(此工作),但我的数组大小为 0。我等不及异步任务完成
      • 您可以简单地将用于扩展布局的代码移动到 AsyncTask 的 onPostExecute() 方法
      • 在 onCreateView 上首先调用你的 asynck,当你得到数组时,然后尝试在执行后扩展你的视图
      猜你喜欢
      • 2019-08-06
      • 2011-10-18
      • 1970-01-01
      • 2017-09-03
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多