尝试解析XML时出现java.lang.NullPointerException

时间:2014-01-14 18:55:44

标签: java android xml nullpointerexception

这个问题真的让我摸不着头脑。

我有一个聊天应用程序,它从服务器解析xml。它是成功解析消息文本,msg id,但我得到UserID的nullpointerException但我从同一位置拉它。请帮忙

// Get messages
            NodeList messageList = documentElement.getElementsByTagName("MESSAGE");
            ret.messages = new ChatStruct[messageList.getLength()];
            Log.v("response","Message Length " + messageList.getLength());
            for (int i = 0; i < messageList.getLength(); i++) {
                Element messageNode = (Element) messageList.item(i);
                ret.messages[i] = new ChatStruct();
                // Get messageId
                try {
                    Element messageIdNode = (Element) messageNode.getElementsByTagName("ID").item(0);
                    String messageId = messageIdNode.getFirstChild().getNodeValue();
                     System.out.println("messageId = " + messageId);
                    ret.messages[i].id = Long.parseLong(messageId);
                    //Log.v("Util","Message ID " + Long.parseLong(messageId));
                } catch (Exception e) {
                    ret.messages[i].id = 0l;
                    // e.printStackTrace();
                }
                // Get text
                try {
                    Element textNode = (Element) messageNode.getElementsByTagName("TEXT").item(0);
                    String text = textNode.getFirstChild().getNodeValue();
                    System.out.println("text = " + text);
                    ret.messages[i].textMessage = text.trim();
                    //Log.v("Util","Message text " + text.trim());
                } catch (Exception e) {
                    ret.messages[i].textMessage = "";
                    // e.printStackTrace();
                }
                // Get userId
                try {
                    //ret.messages[i].userId = 1;
                    //Log.v("Util @ userID node","userID should be 1");
                    Element userIdNode = (Element) messageNode.getElementsByTagName("USERID").item(0);
                    Log.i("Util @ userID node","userIdNode set");

                    String userId = userIdNode.getFirstChild().getNodeValue();
                    //String userId = "1";  
                    Log.i("Util @ userID node","userId String set");
                    System.out.println("userId = " + userId);
                    ret.messages[i].userId = Long.parseLong(userId);
                    //ret.messages[i].userId = 1;

                } catch (Exception e) {
                    Log.v("Util @ userID node", "there was an error " + e);
                    ret.messages[i].userId = 0l;
                    // e.printStackTrace();
                }

我可以对字符串进行硬编码,但除此之外,错误发生在

String userId = userIdNode.getFirstChild().getNodeValue();

它通过注释的代码行确认userIDNode已设置

我无法弄清楚为什么userID没有从服务器进来这里是XML:

<MESSAGE>
<ID><?php echo $row_shouts['msgid']; ?></ID>
<USERID><?php echo $row_shouts['userid']; ?></USERID>
<GENDER><?php echo $row_shouts['gender']; ?></GENDER>
<ONLINE><?php echo $row_shouts['account_status'];?></ONLINE>
<TDATE><?php echo datee("h:i:s M, d Y", strtotime($row_shouts['date'])); ?></TDATE>
<ICONID><?php echo $iconid; ?></ICONID>
<PIC><?php echo $PIC; ?></PIC>
<MSGPIC><?php echo $row_shouts['media']; ?></MSGPIC>
<PICDATE><?php echo strtotime($row_shouts['picdate']); ?></PICDATE>
<ALIAS><![CDATA[<?php echo $row_shouts['nickname'];?>]]></ALIAS>
<TEXT><![CDATA[<?php echo $mesg;?>]]></TEXT>
</MESSAGE>

2 个答案:

答案 0 :(得分:0)

您是否使用DTD文件检查提供的Xml,可能是USERID未在那里明确定义。 [请分享错误日志]

答案 1 :(得分:-1)

如果打印堆栈跟踪,有什么例外?这可能是因为用户ID不长,而您正在尝试解析它。我没有在用户ID的检索中看到任何错误。