Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在XML解析器中应用DOM技术时出现NullPointerException_Java_Android_Xml_Dom - Fatal编程技术网

Java 在XML解析器中应用DOM技术时出现NullPointerException

Java 在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

我运行了这个程序,它在这一行报告了NullPointerException

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(输入流),但我只是担心它不适合这种情况。你这样认为吗?