在满足某些条件时,停止for循环执行下载网页任务



我正在从web下载某些数据,如下所示:

   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循环。在这一点上,它并没有接受break命令。可能的方式是什么。感谢

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

您试图退出的for将在Handler激发之前很久完成,因为您同时启动所有AsyncTasks。粗略地它们都会在一毫秒内开始。Handler在几毫秒内不会启动。

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

相关内容

  • 没有找到相关文章

最新更新