为啥我收到 NullPointerException 错误

Posted

技术标签:

【中文标题】为啥我收到 NullPointerException 错误【英文标题】:Why Am I Getting NullPointerException Error为什么我收到 NullPointerException 错误 【发布时间】:2015-06-27 11:48:07 【问题描述】:

抱歉,我对 Java 知之甚少。我被交给了这个代码来接管。基本上,当我运行代码时,我在 String[] patient = eElement.getElementsByTagName("Name").item(0).getTextContent(), eElement.getElementsByTagName("ID").item(0).getTextContent(), eElement.getElementsByTagName("acquisitionDate").item(0).getTextContent(), eElement.getElementsByTagName("pages").item(0).getTextContent() ; 的行上得到一个 NullPointerException。

这是解析 XML 的块

//parse array of string arrays from xml file that represent the patient list we expect to see, needs to be sorted by acquisition date, in reverse chronological order.
File fxmlFile = new File("patientList.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fxmlFile);

doc.getDocumentElement().normalize(); //should not be necessary but recommended (http://***.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work)

NodeList nList = doc.getElementsByTagName("patient");

String[][] retList = new String[nList.getLength()][4];

for(int i = 0; i < nList.getLength(); i++) 
Node nNode = nList.item(i);
Element eElement = (Element)nNode;
String[] patient = eElement.getElementsByTagName("Name").item(0).getTextContent(), eElement.getElementsByTagName("ID").item(0).getTextContent(), eElement.getElementsByTagName("acquisitionDate").item(0).getTextContent(), eElement.getElementsByTagName("pages").item(0).getTextContent() ;

retList[i] = patient;

这是Improts,不确定是否需要

package test.java.WebReview.Tests;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.testng.Assert;
import main.java.WebReview.Pages.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

这里是 XML 文件

<?xml version="1.0"?>
<patients>
<patient>
<acquisitionDate>2015-04-03T10:03:49.0000000</acquisitionDate>
<id>9876543230</id>
<name>autoTestLast30, autoTestFirst30</name>
<pages>3</pages>
</patient>
</patients>

【问题讨论】:

What is a Null Pointer Exception, and how do I fix it?的可能重复 尝试将行拆分为不同的字符串并检查哪一个为空。例如。字符串名称 =eElement.getElementsByTagName("Name").item(0).getTextContent(); Sting ID =...等等 你对 Java 几乎一无所知,有人给你这段代码来维护?您指出的那条线几乎有十几个可以抛出 NPE 的地方。将其拆分为子行,然后检查它出现在哪一行。 您是否使用调试器并单步执行代码来找出什么是空的? 哇我只想说你们太棒了,一分钟之内我就有了答案……也许这真的很简单哈哈。非常感谢! 【参考方案1】:
eElement.getElementsByTagName("Name")

在您的示例中评估为null(并引发异常),请尝试:

eElement.getElementsByTagName("name") //case sensitive!

..这只是“冰山一角”,请注意所有标签名称是否区分大小写和拼写!

【讨论】:

另外,标记名称在XML中是id,但他在代码中使用ID【参考方案2】:

getElementsByTagName 方法的参数区分大小写。所以 "Name" != "name""id" != "Id"。更改 xml 文件元素名称以匹配您的代码,或更改代码中的值以匹配 xml 文件中元素的大小写。

【讨论】:

【参考方案3】:

格式化代码,使有问题的行占据多行,这样更容易查明错误所在,或者在调试器中运行。

检查你的标签,因为name和Name,id和ID不一样。

【讨论】:

以上是关于为啥我收到 NullPointerException 错误的主要内容,如果未能解决你的问题,请参考以下文章

AllProductsActivity.java 中的 Logcat 错误

使用 ViewPager 的 Layout Inflater 抛出 NullPointerException

为啥我收到此错误,responseSerializationFailed?

为啥我不断收到 OverwriteModelError?

为啥我收到 NullPointerException 错误

为啥我收到 AuthenticationCredentialsNotFoundException?