отладка исключения нулевого указателя затмения - PullRequest
0 голосов
/ 19 августа 2010

У меня есть следующий код в нескольких действиях, и он прекрасно читает и анализирует XML-файлы, но в двух действиях при чтении небольших XML-файлов я получаю исключение нулевого указателя и не могу понять, в чем проблема:

while (eventType != XmlResourceParser.END_DOCUMENT) {
    if ((eventType == XmlResourceParser.START_TAG) ||
        (eventType == XmlResourceParser.TEXT)) {
        // Get the name of the tag (eg scores or score)
        String strName = xmlSymptoms.getName();
        if (helpFound == 1){
            helpText  = xmlSymptoms.getText();
            helpFound = 0;
        } else if (strName.equals("string") && (eventType == XmlResourceParser.START_TAG)) {
            helpFound = 1;
        }

    }
    eventType = xmlSymptoms.next();
}

Исключение пустого указателя возникает, когда я читаю в "<string>", который я могу прочитать с тем же кодом в других действиях.В этом упражнении я могу нормально читать другие XML-токены, пока не доберусь до «<string>».

Вот мое окно отладки

Thread [<1> main] (Приостановлено)
ActivityThread.performLaunchActivity (ActivityThread $ ActivityRecord, Intent) строка: 2628
ActivityThread.handleLaunchActivity (ActivityThread $ ActivityRecord, Intent) строка: 2679
ActivityThread.access $ 2300 (ActivityThread, ActivityThread $ ActivityRecord In),строка: 125 ActivityThread $ H.handleMessage (сообщение) строка: 2033
ActivityThread $ H (обработчик) .dispatchMessage (сообщение) строка: 99 Looper.loop () строка: 123 ActivityThread.main (String []) строка: 4627
Method.invokeNative (Object, Object [], Class, Class [], Class, int, boolean) строка: недоступно [собственный метод]
Method.invoke (Object, Object ...) строка: 521
ZygoteInit $ MethodAndArgsCaller.run () строка: 868
ZygoteInit.main (String []) строка: 626 NativeStart.main (String []) строка: недоступно [собственный метод]
Тема [<6> Связующая нить № 2] (Running) Поток [<5> Binder Thread # 1] (выполняется)

У меня запущен LogCat, но в нем ничего не отображается.

Вот некоторый XML, который работает:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>A</key>
<array>
        <string>ABANDONED, feeling:     </string>
        <string>ABSCESS:        </string>
</array>
</dict>
</plist>

и вот некоторый XML, который не работает:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"   "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>HOWTOTAKE</key>  
  <array>
  <string> Put two pellets in 8 oz bottle of water.</string>
  </array>
</dict>
</plist>

Последнее замечание: когда я попадаю в поле "<string>", getName () возвращает "null" вместо«строка».Очевидно, пытаясь что-то мне сказать, я просто не могу понять, почему возвращается «null».

Есть идеи, как это отладить?

1 Ответ

0 голосов
/ 23 августа 2010

Я понял, в чем проблема.Так как я ищу XmlResourceParser.TEXT, strName.equals ("string") имеет значение null, когда (eventType == XmlResourceParser.TEXT) имеет значение true.Изменение кода для проверки только для (strName.equals ("string"), когда (eventType == XmlResourceParser.START_TAG) имеет значение true, устраняет проблему, как показано в коде ниже:

while (eventType != XmlResourceParser.END_DOCUMENT) {
    if ((eventType == XmlResourceParser.START_TAG) ||
        (eventType == XmlResourceParser.TEXT)) {
        // Get the name of the tag (eg scores or score)
        String strName = xmlSymptoms.getName();
        if (helpFound == 1){
            helpText  = xmlSymptoms.getText();
            helpFound = 0;
        } else if ( (eventType == XmlResourceParser.START_TAG)) {
            if (strName.equals("string") ){
                helpFound = 1;
            }
        }

    }
    eventType = xmlSymptoms.next();
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...