我正在从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
以查看在缓冲区加载之间是否仍然需要内容。