2010-08-19 6 views
-1

J'ai le code suivant dans quelques activités et il lit et analyse des fichiers XML très bien, mais dans deux activités lors de la lecture de petits fichiers XML, je reçois une exception null pointeur et ne peux pas comprendre quel est le problème :eclipse null pointeur exception debug

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

l'exception de pointeur nULL se produit lorsque je lis dans « <string> » que je suis capable de lire avec le même code dans d'autres activités. Dans cette activité, je suis capable de lire dans les autres jetons XML bien jusqu'à ce que j'arrive à "<string>".

Voici ma fenêtre de débogage

Discussion [1 <> principal] (suspendu)
ActivityThread.performLaunchActivity (ActivityThread $ ActivityRecord, intention) Ligne: 2628
ActivityThread.handleLaunchActivity (ActivityThread $ ActivityRecord, intention) ligne: 2679
ActivityThread.access 2300 $ (ActivityThread, ActivityThread $ ActivityRecord, intention) en ligne: 125 ActivityThread $ H.handleMessage (message) ligne: 2033
ActivityThread $ H (Handler) .dispatchMessage (message) ligne: 99 Looper.loop() ligne: 123 ActivityThread.main (String []) ligne: 4627
Méthode.invokeNative (Objet, Objet [], Classe, Classe [], Classe, int, booléen) ligne: non disponible [ méthode native]
Method.invoke (Object, Object ...) en ligne: 521
ZygoteInit $ ligne MethodAndArgsCaller.run(): 868
ZygoteInit.main ligne (String []): 626 NativeStart.main (String []) ligne: non disponible [méthode native]
Thread [6 <> Binder Thread # 2] (course) discussion [5 <> Binder Sujet # 1] (course)

J'ai LogCat en cours d'exécution, mais rien n'apparaît à l'intérieur.

Voici quelques-uns XML qui fonctionne:

<?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> 

et certains XML ici qui ne fonctionne pas:

<?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> 

Une dernière note: Quand je reçois le champ "<string>", getName() renvoie "null" au lieu de "string". Évidemment, en essayant de me dire quelque chose, je n'arrive pas à comprendre pourquoi "null" est retourné.

Des idées comment déboguer cela?

+0

Quelle ligne ne le NPE se produit ? sur – JRL

+0

pouvez-vous donner un exemple de xml qui fonctionne et qui ne fonctionne pas – dbrettschneider

+0

JRL - la ligne du code d'activité NPE se produit sur est: } else if (strName.equals (« string ») && (eventType == XmlResourceParser.START_TAG)) { –

Répondre

0

J'ai trouvé quel était le problème. Puisque je cherche XmlResourceParser.TEXT, strName.equals ("string") est null quand (eventType == XmlResourceParser.TEXT) est vrai. Modification du code pour vérifier que pour (strName.equals (« string ») quand (eventtype == XmlResourceParser.START_TAG) est vrai, résolu le problème comme indiqué dans le code ci-dessous:

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(); 
} 
} 
Questions connexes