我正在从网上下载某些数据:
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循环。此时没有取消命令。可能的方法是什么。谢谢
答案 0 :(得分:0)
快速回答是使用abreak或return,具体取决于退出循环所需的距离。 一种更“优雅”的方式是抛出一个异常:它还可以让你检测到你已经离开循环,因为你已经满足了你的条件。 不要忘了清理(关闭溪流等等)。在你离开之前。
答案 1 :(得分:0)
您尝试退出的for
将在Handler
触发前很久完成,因为您同时启动了所有AsyncTasks
。大概......他们都会在一毫秒之内开始。 Handler
将不会触发几毫秒。
要阻止他们中途,你需要一些棘手的编码。也许缓冲下载并检查WeakReference
以查看缓冲区加载之间是否仍需要内容。