我正在尝试阅读Yahoo的rss feed,但我无法使其正常工作。代码绝对正确,我很确定。它有时工作,但有时我得到UnknownHostException。可能是什么原因?我的网络或其他什么问题?这是我的代码: -
public List<RssFeed> getRssFeed() {
try {
List<RssFeed> objList = new ArrayList<RssFeed>();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse("http://rss.news.yahoo.com/rss/india");
//doc.getDocumentElement().normalize();
Element docElement = doc.getDocumentElement();
NodeList objChannelList = docElement.getChildNodes();
for (int intIndex = 0; intIndex < objChannelList.getLength(); intIndex++) {
if (objChannelList.item(intIndex).getNodeType() == Node.ELEMENT_NODE) {
Element elemItem = (Element) objChannelList.item(intIndex);
NodeList itemList = elemItem.getElementsByTagName("item");
//show only 3 news
int count = itemList.getLength() > 3 ? 3 : objChannelList.getLength();
for (int intSubIndex = 0; intSubIndex < count; intSubIndex++) {
NodeList itemDetailList = itemList.item(intSubIndex).getChildNodes();
String strTitle = ((Node) itemDetailList.item(RSS_VALUES.TITLE.getValue())).getFirstChild().getNodeValue();
String strdescription = ((Node) itemDetailList.item(RSS_VALUES.DESCRIPTION.getValue())).getFirstChild().getNodeValue();
String strLink = ((Node) itemDetailList.item(RSS_VALUES.LINK.getValue())).getFirstChild().getNodeValue();
//System.out.println(strTitle + "\n" + strdescription + "\n" + strLink + "\n\n\n\n");
objList.add(new RssFeed(strTitle, strdescription, strLink));
}
}
}
return objList;
} catch (SAXException ex) {
Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
} catch (ParserConfigurationException ex) {
Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
提前谢谢:)。自1个月以来,这个问题一直困扰着我。不知道为什么Java在这种情况下表现得像它的情绪:(
答案 0 :(得分:4)
如果DNS服务器发生打嗝,可能会发生这种情况。除了使DNS服务器更强大或寻找另一个服务器之外,您还可以使用完整的IP地址而不是主机名。这样,它不需要根据主机名查找IP地址。 截至目前为止 216.115.98.240
。
db.parse("http://216.115.98.240/rss/india");
但是,我宁愿修复DNS问题并更喜欢DNS,因为IP地址可能会不时发生变化。
更新:IP地址方法显然不适用于Yahoo News RSS feed域。然后,您应该真正使用主机名并修复DNS服务器问题。
答案 1 :(得分:2)
UnknownHostException
表示指定的主机无法转换为IP地址。它很可能是您的DNS服务器的问题。
答案 2 :(得分:1)
如果DNS解析间歇性失败,请捕获异常并再次尝试,直到您获得名称解析。您只能控制,控制什么......如果您无法控制/修复DNS服务器,请使您的应用程序足够强大,以处理奇特的DNS服务器。
答案 3 :(得分:0)
我也没有明显的原因在Java中看到零星的UnknownHostExceptions。解决方案是仅重试几次。这是用于DocumentBuilder.parse的包装器,用于执行此操作:
static Document DocumentBuilder_parse(DocumentBuilder b, String uri) throws SAXException, IOException {
UnknownHostException lastException = null;
for (int tries = 0; tries < 2; tries++) {
try {
return b.parse(uri);
} catch (UnknownHostException e) {
lastException = e;
System.out.println("Retrying because of: " + e);
continue;
}
}
throw lastException;
}