在满足某些条件时停止for循环执行DownloadWebpage任务

时间:2015-02-06 13:14:19

标签: android

我正在从网上下载某些数据:

   private void marketTableShow() throws IOException {
       for (int i = 1; i < 10; i++) {
          String stri = String.valueOf(i);
          String stringUrl = ""http://live-nse.herokuapp.com/?symbol="+ stri
          new DownloadWebpageTask().execute(stringUrl);

        mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                String strmsg = msg.toString();
                if (strmsg.contains("[]")) {
                     //to stop the loop
                }
            }
        };
    }
}

private class DownloadWebpageTask extends
        AsyncTask<String, Integer, String> {
    protected String doInBackground(String... urls) {

        for (String url : urls) {
            try {
                strcontent = downloadUrl(url);
            } catch (IOException e) {
                Dialog(e);
            }
        }
        return strcontent;
    }

    @Override
    protected void onPostExecute(String results) {
        System.out.println(results);
        Message msg = new Message();
        msg.obj = results;
        mHandler.sendMessage(msg);
    }
}

现在我希望在某些条件下

if (strmsg.contains("[]")) {
     ***//to stop the loop***
}

满足而不是再下载,之后我应该退出for循环。此时没有取消命令。可能的方法是什么。谢谢

2 个答案:

答案 0 :(得分:0)

快速回答是使用abreak或return,具体取决于退出循环所需的距离。 一种更“优雅”的方式是抛出一个异常:它还可以让你检测到你已经离开循环,因为你已经满足了你的条件。 不要忘了清理(关闭溪流等等)。在你离开之前。

答案 1 :(得分:0)

您尝试退出的for将在Handler触发前很久完成,因为您同时启动了所有AsyncTasks。大概......他们都会在一毫秒之内开始。 Handler将不会触发几毫秒。

要阻止他们中途,你需要一些棘手的编码。也许缓冲下载并检查WeakReference以查看缓冲区加载之间是否仍需要内容。