我正在使用rss feed获取最新消息 我得到了一个XML响应
我面临的问题是,如果花费的时间超过5秒,我只想让程序停止 这是我的代码(出于测试目的,我将时间设置为1秒)
public static void main(String args[]) {
Connection dbConnection = null;
PreparedStatement inserpstmt = null;
try {
final JSONArray latestnews = new JSONArray();
builder = getDocumentBuilderInstance();
final URL url = new URL("http://www.rssmix.com/u/8171434/rss.xml");
url.openConnection().setConnectTimeout(1000);
url.openConnection().setReadTimeout(1000);
final Document doc = builder.parse(url.openStream());
final NodeList items = doc.getElementsByTagName("item");
for (int i = 0; i < items.getLength(); i++) {
final Element item = (Element) items.item(i);
final String title = getValue(item, "title");
System.out.println(title);
}
} catch (Exception e) {
e.printStackTrace();
e.getMessage();
} catch (Throwable e) {
e.getMessage();
e.printStackTrace();
} finally {
}
}
但是,请你告诉我为什么没有停止等待超过1秒
已编辑的代码
StringBuffer sb = new StringBuffer("http://www.rssmix.com/u/8171434/rss.xml");
URLConnection conn = new URL(sb.toString()).openConnection();
conn.setConnectTimeout(7000);
conn.setReadTimeout(7000);
final Document doc = builder.parse(new InputSource(conn.getInputStream()));
答案 0 :(得分:1)
您应该以下列方式处理此问题。
final URL url = new URL("http://www.rssmix.com/u/8171434/rss.xml");
URLConnection urlConn = url.openConnection();
urlConn.setConnectTimeout(1000);
urlConn.setReadTimeout(1000);
final Document doc = builder.parse(urlConn.getInputStream());
答案 1 :(得分:0)
在上面的代码中,每次调用openConnection时,都会得到一个新的Connection对象。最后,您使用的是openStream,它等同于openConnection()。getInputStream()。因此所有超时都在不同的连接对象上,最后在输入流的连接对象上没有设置超时。这就是它无法正常工作的原因。下面的代码将起作用,因为在检索InputStream的同一对象上存在超时。
strtok_r