解析XML网页时,getNodeValue()上的空指针异常 - android

时间:2014-07-15 17:39:51

标签: java android xml parsing xml-parsing

我查看了这里发布的几个答案,但我找不到我需要的答案。它可能与网站本身有关,但我认为不是。 我正在尝试解析网站上的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();
        }

我在最后一行收到错误。

感谢您的帮助。

3 个答案:

答案 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>

我注意到如果我在浏览器中打开了这个文件,代码会在我刷新页面之前突然停止工作,然后开始给我正确的输出。

我怀疑此网址存在问题,因为当它正常工作时,此代码可以正常工作。

祝你好运......