java - 在 Java 中使用 DOM 解析器时出现 Null 异常

标签 java android

我正在制作一个 Android 应用程序,为此我必须进行一些 XML 解析。我遵循了一个示例,该示例有效,但是当我尝试根据我的使用情况调整该示例时,我得到了一个我不明白的空指针异常。这应该包含所有相关的代码位。问题出在该 fragment 底部附近 Log.e("5", "5") 和相应的 "6" 之间的行 元素 docEle = dom.getDocumentElement();

有什么想法吗?

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);

        }
    }
}

这是日志猫

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

最佳答案

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

查看堆栈跟踪并找出调用时出现的异常:

dom =db.parse("LoadReportResponse.xml");

我敢打赌路径不正确;)

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

关于java - 在 Java 中使用 DOM 解析器时出现 Null 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17284468/

相关文章:

java - NumberFormatException 与 ParseInt

java - 设计用于插入和删除域对象的数据库接口(interface) API

java - 具有 Long、Int 或 String 等类型的 WeakHashMap

android - 是否可以使用 iOS 和 Android 设备创建蓝牙网状网络

java - 序列化为 json 响应时避免 hibernate lazy init 异常的更好方法

android - 大胆的 ClickableSpan 触摸

android - Android 的 StrictMode 的生命周期是什么?

java - 在 Android 中使用 Java Mail API 邮寄大图像(> 500 KB)时出错

android ProgressDialog 字体大小改变

Java/Swing+NetBeans 6.1。键盘事件不起作用