【问题标题】:AsyncTask do not work in for loopAsyncTask 在 for 循环中不起作用
【发布时间】:2014-02-16 07:40:54
【问题描述】:

我的 AsyncTask 类在 for 循环中不起作用。以下是我的代码,请查看。

for (int i = 0; i < size; i++) {
    String id = careplan_disease_Parser.DiseaseID.get(i);
    String method = "GetCarePlan_Comment?CurrentValue=0&OptionId=" + id + "&DiseaseID=" + id + "&OrgId=" + orgId + "";
    String link = "GetCarePlan_Comment_dislink";

    task = new AsyncTask123();
    task.execute(link, method);
    method=null;
    link=null;
    task=null;
}

任务只执行一次。所以我无法在循环中第二次从网络服务中获得价值。 请帮助我如何使它工作。

谢谢

【问题讨论】:

  • 尝试将for loop移动到doInBackround()内部AsyncTask123()
  • 当我在后台执行循环时。它给了我错误 java.lang.RuntimeException: Can't create handler inside the thread that has not called Looper.prepare()
  • 并确保请不要在doInBackround()中调用AsyncTask123(),仅从那里调用Http请求
  • 是的,我没有再次调用 asyncTask123()。但出现同样的错误,请帮助我。

标签: android web-services xml-parsing android-asynctask


【解决方案1】:

您可以编写一个启动方法,该方法在您的 AsyncTask 的 onPostExecute 部分中被调用。它应该是这样的:

private void start(int number)
{
    if(number == size)
    {
        //exit
    }
    else
    {
        new AsyncTask123().execute(link, method);
    }
}


private class AsyncTask123 extends AsyncTask<> {
    protected void onPostExecute() {
        start(i++);
    }
}

这应该可行,您只需要根据自己的需要进行调整即可。

【讨论】:

    【解决方案2】:

    如果你想在 for 循环中使用 AsyncTask,那么你应该像这样调用你的类:

       new AsyncTask123().execute(link, method);
    

    不像:

             task = new AsyncTask123();
             task.execute(link, method);
    

    【讨论】:

      猜你喜欢
      • 2012-06-13
      • 1970-01-01
      • 2017-04-13
      • 2013-12-31
      • 2017-01-14
      • 2011-07-21
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多