我查看了这里发布的几个答案,但我找不到我需要的答案。它可能与网站本身有关,但我认为不是。 我正在尝试解析网站上的XML,并且我收到空指针异常错误。
我在网上阅读时,运行解析是一个跟谷歌需求相关的独立线程。
请查看我的代码并尝试提供帮助。
class BackgroundTask1 extends AsyncTask<String, Void, String[]> {
protected String[] doInBackground(String... url) {
new HttpGet();
new StringBuffer();
InputStream is = null;
HttpURLConnection con = null;
try {
//Log.d("eyal", "URL: " + boiUrl);
URL url1 = new URL("http://www.boi.org.il/currency.xml");
con = (HttpURLConnection)url1.openConnection();
con.setRequestMethod("GET");
con.connect();
is = con.getInputStream();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(is);
NodeList lastVld = doc.getElementsByTagName("LAST_UPDATE");
String lastV = lastVld.item(0).getFirstChild().getNodeValue();
}
catch (Exception e) {
e.printStackTrace();
}
我在最后一行收到错误。
感谢您的帮助。
答案 0 :(得分:0)
您的xml中只有一个LAST_UPDATE标记,并且它具有内部值,因此请尝试使用item(0)
中的Node Class中的节点值
String lastV = lastVld.item(0).getNodeValue();
HTHS
答案 1 :(得分:0)
没有为该标记名称返回任何节点。您可能需要先检查lastVld的大小,然后尝试访问其中的项目。
答案 2 :(得分:0)
这段代码对我有用
InputStream is = null;
HttpURLConnection con = null;
try {
URL url1 = new URL("http://www.boi.org.il/currency.xml");
con = (HttpURLConnection)url1.openConnection();
con.setRequestMethod("GET");
con.connect();
is = con.getInputStream();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(is);
NodeList lastVld = doc.getElementsByTagName("LAST_UPDATE");
Element elem = (Element) lastVld.item(0);
String lastV = elem.getTextContent();
System.out.println(lastV);
} catch (Exception e) {
e.printStackTrace();
}
我通过添加变换器将结果打印到控制台来验证我获得了很好的内容。
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer xform = tFactory.newTransformer();
xform.transform(new DOMSource(doc), new StreamResult(System.out));
有几次我尝试在elem
出现null的情况下运行,我认为这与从URL检索到的一些不良内容有关。这是变压器打印的内容。
<html>
<body>
<script>document.cookie='iiiiiii=11a887d6iiiiiii_11a887d6; path=/';window.location.href=window.location.href;</script>
</body>
</html>
我注意到如果我在浏览器中打开了这个文件,代码会在我刷新页面之前突然停止工作,然后开始给我正确的输出。
我怀疑此网址存在问题,因为当它正常工作时,此代码可以正常工作。
祝你好运......