2014-01-14 4 views
0

Эта проблема действительно заставляет меня почесывать голову.java.lang.NullPointerException при попытке проанализировать XML

У меня есть приложение чата, которое анализирует xml с сервера. Он успешно разбирает текст сообщения, msg id, но я получаю исключение nullpointerException для UserID, но я вытаскиваю его из того же места. Пожалуйста, помогите

// 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 установлен

я не могу понять, почему идент не поступает из сервера здесь является 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> 
+0

это кажется ничего проблема в ваших разборе кодов .. я думаю, что ответ (или источник) XML может быть проблема .. почему бы вам не проверить полный источник XML перед разбором ? – namxee

+0

Можете ли вы рассказать мне, как я буду это делать? – TWeeKeD

+0

Сначала попробуйте hardcoding userid в xml как и убедитесь, что проблема не на стороне сервера. –

ответ

-1

Что вы говорите, если вы печатаете трассировку стека? Возможно, это связано с тем, что идентификатор пользователя не длинный, и вы пытаетесь его разобрать. Я не вижу ошибок в поиске идентификатора пользователя.

+1

Это должен быть комментарий. – Melquiades

+0

01-14 13: 01: 50.974: V/Util @ userID node (7738): произошла ошибка java.lang.NullPointerException – TWeeKeD

+0

Нет вашего кода ошибки в catch, распечатайте трассировку стека, раскомментируйте эту строку: // e.printStackTrace(); – Mark

0

Вы проверили с DTD-файлом для поставляемого Xml, возможно, USERID явно не определен. [пожалуйста, разделяющие журналы ошибок]

+2

Это должен быть комментарий. – Melquiades

+0

Простите мое невежество. Где находится файл DTD? в Logcat Я могу видеть только ошибку из-за: Log.v («Util @ userID node», «была ошибка» + e); то есть когда он сообщает мне java.lang.nullpointerexception – TWeeKeD

+0

FYI. Путь для DTD определен в вашем XML-файле в его заголовке, например: ' '@TWeeKeD – Satyam

Смежные вопросы