【问题标题】:For loop is not looping through elementsFor循环不是循环遍历元素
【发布时间】:2016-01-26 15:43:00
【问题描述】:

我正在尝试从我的 XML(图像和文本)中解析值,但是当我想在应用程序中返回每个单独的值时,这段代码只是一遍又一遍地返回相同的值。谁能告诉我该怎么做?当我尝试通过它运行(i)时,我收到此错误当我尝试该代码时,它会引发此错误: 无法启动活动 ComponentInfo{com.example.shannon.dogs/com.example.shannon.dogs.ActivityOne}:java.lang.NullPointerException:尝试调用接口方法 'org.w3c.dom.Node org.w3c.dom。空对象引用上的 Node.getFirstChild()' –

    NodeList nameNodeList = doc.getElementsByTagName("name");
    NodeList originNodeList = doc.getElementsByTagName("origin");
    NodeList colorNodeList = doc.getElementsByTagName("color");
    NodeList imageNodeList = doc.getElementsByTagName("image");
    NodeList heightNodeList = doc.getElementsByTagName("height");
    NodeList weightNodeList = doc.getElementsByTagName("weight");
    NodeList groomingNodeList = doc.getElementsByTagName("grooming");
    //NodeList infoNodeList = doc.getElementsByTagName("info");
    NodeList lifespanNodeList = doc.getElementsByTagName("lifespan");
    NodeList urlNodeList = doc.getElementsByTagName("url");


        //create data
        data = new Dog[nameNodeList.getLength()];
       for (int i = 0; i < data.length; i++) {
          data[i] = new Dog(
                nameNodeList.item(0).getFirstChild().getNodeValue(),
                originNodeList.item(0).getFirstChild().getNodeValue(),
                colorNodeList.item(0).getFirstChild().getNodeValue(),
                imageNodeList.item(0).getFirstChild().getNodeValue(),
                heightNodeList.item(0).getFirstChild().getNodeValue(),
                weightNodeList.item(0).getFirstChild().getNodeValue(),
                groomingNodeList.item(0).getFirstChild().getNodeValue(),
                lifespanNodeList.item(0).getFirstChild().getNodeValue(),
                urlNodeList.item(0).getFirstChild().getNodeValue());
        //infoNodeList.item(i).getFirstChild().getNodeValue(),  //);
    }

【问题讨论】:

  • 这是一个简单的for循环逻辑,在问这样的问题之前你需要尝试一下。
  • 请查看我编辑的问题 - 每次我尝试通过它运行(i)时都会出错。

标签: java arrays nodes


【解决方案1】:

你没有遍历它们。你只是在看第一个元素。尝试将 0 更改为 i 以与您的 for 循环内联

data = new Dog[nameNodeList.getLength()];
for (int i = 0; i < data.length; i++) {
    data[i] = new Dog(
            nameNodeList.item(i).getFirstChild().getNodeValue(),
            originNodeList.item(i).getFirstChild().getNodeValue(),
            colorNodeList.item(i).getFirstChild().getNodeValue(),
            imageNodeList.item(i).getFirstChild().getNodeValue(),
            heightNodeList.item(i).getFirstChild().getNodeValue(),
            weightNodeList.item(i).getFirstChild().getNodeValue(),
            groomingNodeList.item(i).getFirstChild().getNodeValue(),
            lifespanNodeList.item(i).getFirstChild().getNodeValue(),
            urlNodeList.item(i).getFirstChild().getNodeValue());
    //infoNodeList.item(i).getFirstChild().getNodeValue(),  //);
}

【讨论】:

  • 当我尝试该代码时,它会抛出此错误:无法启动活动 ComponentInfo{com.example.shannon.dogs/com.example.shannon.dogs.ActivityOne}:java.lang.NullPointerException:尝试在空对象引用上调用接口方法“org.w3c.dom.Node org.w3c.dom.Node.getFirstChild()”
  • 根据文档 (docs.oracle.com/javase/7/docs/api/org/w3c/dom/…) - 此节点的第一个子节点。如果没有这样的节点,则返回 null。您可能必须更改其他代码以适应这种情况。
猜你喜欢
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 2016-05-29
  • 1970-01-01
相关资源
最近更新 更多