Java 在XML解析器中应用DOM技术时出现NullPointerException
我运行了这个程序,它在这一行报告了NullPointerExceptionJava 在XML解析器中应用DOM技术时出现NullPointerException,java,android,xml,dom,Java,Android,Xml,Dom,我运行了这个程序,它在这一行报告了NullPointerException NodeList nodeList = root.getChildNodes(); 事情是这样的: package com.example.dom_technique; import java.io.IOException; import java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import
NodeList nodeList = root.getChildNodes();
事情是这样的:
package com.example.dom_technique;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class DOM extends Activity {
private Button button;
private TextView textView;
protected void onCreate(Bundle x) {
super.onCreate(x);
setContentView(R.layout.activity_dom);
button = (Button) findViewById(R.id.button1);
textView = (TextView) findViewById(R.id.textView1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
readXML();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
private void readXML() throws ParserConfigurationException, SAXException, IOException {
String output = "";
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputStream inputStream = getResources().openRawResource(R.drawable.student);
Document doc = builder.parse(inputStream);
Element root = doc.getDocumentElement();
NodeList nodeList = root.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node instanceof Element) {
Element student = (Element) node;
String name = student.getAttribute("name");
String student_id = student.getAttribute("student_id");
NodeList subNodeList = student.getElementsByTagName("school");
String school = subNodeList.item(0).getTextContent();
subNodeList = student.getElementsByTagName("major");
String major = subNodeList.item(0).getTextContent();
output += name + " " + student_id + "\n" + school + "\n" + major +"\n" + " ***********" + "\n";
}
}
textView.setText(output);
}
}
package com.example.dom_技术;
导入java.io.IOException;
导入java.io.InputStream;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
导入org.w3c.dom.Node;
导入org.w3c.dom.NodeList;
导入org.xml.sax.SAXException;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
公共类DOM扩展活动{
私人按钮;
私有文本视图文本视图;
创建时受保护的void(Bundle x){
super.onCreate(x);
setContentView(R.layout.activity_dom);
按钮=(按钮)findViewById(R.id.button1);
textView=(textView)findViewById(R.id.textView1);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
试一试{
readXML();
}捕获(ParserConfiguration异常e){
e、 printStackTrace();
}捕获(SAXE异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
});
}
private void readXML()引发ParserConfiguration异常、SAXException、IOException{
字符串输出=”;
DocumentBuilder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputStream InputStream=getResources().openRawResource(R.drawable.student);
文档doc=builder.parse(inputStream);
元素根=doc.getDocumentElement();
NodeList NodeList=root.getChildNodes();
for(int i=0;i
以及我自己编写的XML文件:
<?xml version="1.0" encoding="utf-8"?><students>
<student name="Henry Thompson" student_id="63827614">
<school>University of California, Berkeley</school>
<major>Computer Science</major>
</student>
<student name="Sheila Lopez" student_id="02817281">
<school>University of California, Los Angeles</school>
<major>Electrical Engineering</major>
</student>
<student name="Gabriel Carter" student_id="92717290">
<school>University of California, Davis</school>
<major>Mathematics</major>
</student>
<student name="Stephanie Nguyen" student_id="83729337">
<school>University of California, San Diego</school>
<major>Business Administraion, Concentration in Marketing</major>
</student>
</students>
加利福尼亚大学伯克利分校
计算机科学
加利福尼亚大学,洛杉矶
电气工程
加利福尼亚大学戴维斯分校
数学
圣地亚哥加利福尼亚大学
商业管理,专注于市场营销
我几乎无法理解为什么,我想我已经完成了所有的要求。我怀疑问题可能来自XML文件。起初,我试图在drawable文件夹中创建一个XML文件,它报告了错误。因此,我在记事本中编写,使用xml扩展保存并导入到drawable中,然后就可以了。
请帮帮我!!!非常感谢 看起来您的xml最后缺少了结束标记。因此无法正确解析根元素(即“students”)
开放的“学生”标签有点隐藏在第一行。 < P>对于那些花时间考虑我的问题的人,我要向大家表示感谢。 幸运的是,我找到了修复我的问题的方法,即将student.xml重命名为student only。似乎我们导入到drawable中的所有内容,如果我们希望它工作,就不应该提及扩展。我试过了,效果很好。
再一次,非常感谢 stacktrace在哪里?你们放了断点并调试了吗?不,我并没有放断点。日志猫告诉我我得到了NullPointerException我们会先这样做,如果你想得到stacktraceSorry的帮助,但我想我已经在我问题的标题中提到了stacktrace,我一次又一次地提到了它,我在你上面的评论中提到了它。哦,是的,你是对的,但这是我键入的错误。我在我的原始程序中有它。让我来修理!!!root显然是空的。这意味着文档“doc”可能是一个空文档。因此,我猜测您正在打开的资源在某种程度上是不正确的,可能是空的。我不知道在这种情况下使用parse(InputStream)是否可以,大多数教程使用SD卡中的文件,我使用的是内部存储。它有parse(输入流),但我只是担心它不适合这种情况。你这样认为吗?