在Java中使用DOM解析器时出现空异常

在Java中使用DOM解析器时出现空异常,java,android,Java,Android,我正在制作一个Android应用程序,为此我必须进行一些XML解析。我遵循了一个有效的示例,但是当我尝试根据自己的用法调整示例时,我得到了一个空指针异常,我不理解。这应该包含所有相关的代码位。问题在于Log.e(“5”,“5”)与Element docEle=dom.getDocumentElement()对应的“6”之间的snippit底部附近的一行 有什么想法吗 public class Parser { //Constructor ArrayList<Response> re

我正在制作一个Android应用程序,为此我必须进行一些XML解析。我遵循了一个有效的示例,但是当我尝试根据自己的用法调整示例时,我得到了一个空指针异常,我不理解。这应该包含所有相关的代码位。问题在于
Log.e(“5”,“5”)
Element docEle=dom.getDocumentElement()对应的
“6”
之间的snippit底部附近的一行

有什么想法吗

public class Parser {

//Constructor
ArrayList<Response> responseList;
ArrayList<ResourceType> resourceTypeList;
List myEmpls;
Document dom;

public Parser()
{
    responseList = new ArrayList<Response>();
    resourceTypeList = new ArrayList<ResourceType>();
    myEmpls = new ArrayList();
}

public void addRequest(int reportId)
{
    Request request = new Request(reportId);
    Response response = new Response(request);
        //Form XML in LoadReport Request
        //Send XML
        //Receive and parse 
    parseReportResponse();
        //Input information into response
        //Form XML in GetRoomData request
        //Send XML
        //Receive and parse
        //Input information into response
    responseList.add(response);
    Log.e("5", "5");
}
public void parseReportResponse()
{
    parseReportXML();
    parseReportDocument();
}   

public void parseReportXML()
{
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    try {
        DocumentBuilder db = dbf.newDocumentBuilder();
        dom = db.parse("LoadReportResponse.xml");

    }catch(ParserConfigurationException pce) {
        pce.printStackTrace();
    }catch(SAXException se) {
        se.printStackTrace();
    }catch(IOException ioe) {
        ioe.printStackTrace();
    }
}
public void parseReportDocument()
{
    Log.e("5", "5");
    Element docEle = dom.getDocumentElement();
    Log.e("6", "6");
    NodeList nl = docEle.getElementsByTagName("Room");
    if(nl != null && nl.getLength() > 0) 
    {
        for(int i=0; i<nl.getLength(); i++) 
        {
                Element el = (Element)nl.item(i);
                //Employee e = getEmployee(el);
                Room room = getNewRoom(el);
                myEmpls.add(room);

        }
    }
}

问题是您从未初始化参数
dom
,因为您的
public void parseReportXML()
方法正在引发异常

查看stacktrace,找出调用时出现的异常:

dom=db.parse(“LoadReportResponse.xml”)

我敢打赌,路径不正确(;)


编辑:您发布的stacktrace告诉您,
db
找不到文档。所以,是的,路径是不正确的。查看一些用Java加载文件的示例,有时并不那么容易。

问题是您从未初始化参数
dom
,因为您的
public void parseReportXML()
方法引发异常

查看stacktrace,找出调用时出现的异常:

dom=db.parse(“LoadReportResponse.xml”)

我敢打赌,路径不正确(;)


编辑:您发布的stacktrace告诉您,
db
找不到文档。所以,是的,路径是不正确的。查看一些用Java加载文件的示例,有时并不那么容易。

您可以发布堆栈跟踪吗。NullPointerException可能还有另一个原因。例如,如果在创建dom对象时引发另一个异常。然后它没有初始化,并且为空。是否有任何以前引发的异常?代码中的哪一行导致NPE?我无法直接从logcat判断,但一旦我注释“Element docEle=dom.getDocumentElement();”(以及函数中它下面的其余部分),代码将不再崩溃,因此应该是这一行。您可以发布堆栈跟踪吗。NullPointerException可能还有另一个原因。例如,如果在创建dom对象时引发另一个异常。然后它没有初始化,并且为空。是否有任何以前抛出的异常?代码中的哪一行导致NPE?我无法直接从logcat中判断,但一旦我注释“Element docEle=dom.getDocumentElement();”(以及函数中它下面的其余部分),代码就不再崩溃,所以应该是这一行。嘿,Asier,我不知道如何跟踪堆栈跟踪。除了看到一个NullPointerException之外,我对Logcat没有太多了解。我使用与示例相同的路径,因为我将XML放在项目文件夹中的同一级别上,与我遵循的示例中的相同级别。我还需要做些什么来确保找到文件?编辑:刚刚看到你的编辑。我会查的。谢谢看一看;)在构造解析器之前,我在我的主活动中添加了“MainActivity.class.getResource(“LoadReportResponse.xml”);”。但它仍然面临同样的问题。我不明白这一点,它在项目目录中,应该可以找到它。右键单击文件并查看文件的
相对路径。如果已将文件正确添加到项目中,则必须插入该路径。告诉我您的进度。在Eclipse中,当我右键单击该文件并转到路径下的属性->资源时,它显示“/[Something]/LoadReportResponse.xml”我尝试使用它,而不仅仅是LoadReportResponse.xml,但它也有完全相同的问题。我相信这是条路,对吗?嘿,阿瑟,我不知道怎么追踪。除了看到一个NullPointerException之外,我对Logcat没有太多了解。我使用与示例相同的路径,因为我将XML放在项目文件夹中的同一级别上,与我遵循的示例中的相同级别。我还需要做些什么来确保找到文件?编辑:刚刚看到你的编辑。我会查的。谢谢看一看;)在构造解析器之前,我在我的主活动中添加了“MainActivity.class.getResource(“LoadReportResponse.xml”);”。但它仍然面临同样的问题。我不明白这一点,它在项目目录中,应该可以找到它。右键单击文件并查看文件的
相对路径。如果已将文件正确添加到项目中,则必须插入该路径。告诉我您的进度。在Eclipse中,当我右键单击该文件并转到路径下的属性->资源时,它显示“/[Something]/LoadReportResponse.xml”我尝试使用它,而不仅仅是LoadReportResponse.xml,但它也有完全相同的问题。我相信这是条路,对吗?
06-24 15:16:08.209: E/AndroidRuntime(6017): FATAL EXCEPTION: main
06-24 15:16:08.209: E/AndroidRuntime(6017): java.lang.RuntimeException: Unable to start activity ComponentInfo{[Stuff I have to hide].MainActivity}: java.lang.NullPointerException
06-24 15:16:08.209: E/AndroidRuntime(6017):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at android.os.Looper.loop(Looper.java:137)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at android.app.ActivityThread.main(ActivityThread.java:5039)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at java.lang.reflect.Method.invokeNative(Native Method)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at java.lang.reflect.Method.invoke(Method.java:511)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at dalvik.system.NativeStart.main(Native Method)
06-24 15:16:08.209: E/AndroidRuntime(6017): Caused by: java.lang.NullPointerException
06-24 15:16:08.209: E/AndroidRuntime(6017):     at com.example.[I have to hide].Parser.parseReportDocument(Parser.java:81)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at com.example.[I have to hide].Parser.parseReportResponse(Parser.java:59)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at com.example.[I have to hide].Parser.addRequest(Parser.java:41)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at com.example.[I have to hide].MainActivity.onCreate(MainActivity.java:79)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at android.app.Activity.performCreate(Activity.java:5104)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
06-24 15:16:08.209: E/AndroidRuntime(6017):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
06-24 15:16:08.209: E/AndroidRuntime(6017):     ... 11 more