2010-11-27 3 views
1

J'ai ce code:non valide si la déclaration

Node main_node = document.getDocumentElement(); 
NodeList main_node_list = main_node.getChildNodes(); 
for(int main_iterator = 0; main_iterator < main_node_list.getLength(); main_iterator++) { 
    Node child_node = main_node_list.item(main_iterator); 
    String child_node_name = child_node.getNodeName(); 
    if(child_node_name == "#text") continue; 
    Toast.makeText(context, "\"" + child_node_name + "\"", Toast.LENGTH_SHORT).show(); 
    if(child_node_name == "library_visual_scenes") { 
    ... 
    } 
} 

Il ne peut pas être plus clair, mais dans le Toast entre les deux si les déclarations, il montre que child_node_name est exactement égal « library_visual_scenes » à certains point. Ceci sans la seconde déclaration if étant vraie.

La première instruction if, lorsque child_node_name est égal à "#text" est exécutée. Ce qui signifie que je ne vois jamais le texte "#text" dans le Toast.

child_node_name est un objet String. Est-ce la bonne façon de comparer une chaîne avec une chaîne de caractères?

Je ne peux pas savoir ce qui se passe ici. Cela pourrait-il être quelque chose de spécifique à Android, puisque presque le même code fonctionne si je l'exécute en Java sur mon ordinateur?

Répondre

7

Remplacer

child_node_name == "library_visual_scenes" 
child_node_name == "#text" 

Avec

"library_visual_scenes".equals(child_node_name); 
"#text".equals(child_node_name); 

Ainsi, vous devez comparer les chaînes de Java. "==" compare les références, pas les contenus.

+2

Si ce n'est pas l'erreur programmeur java novice la plus courante, il doit être proche. –

+1

Merci! Je vois que vous utilisez "text" .equals (String) et non String.equals ("text"). Y a-t-il un moyen préféré? – Espen

+3

@ Eh bien, "texte" .equals (une_variable) peut vous sauver (empêcher NullPointerEception possible) dans la situation où some_variable est null. Donc, je pense que c'est la façon préférée dans le cas où vous n'êtes pas totalement sûr qu'il est sûr d'invoquer some_variabe.equals() –

2

Changer les lignes suivantes à utiliser la méthode equals:

if(child_node_name.equals("#text")) continue; 

et

if(child_node_name.equals("library_visual_scenes")) {