J'écris une application Android qui fait beaucoup de choses. J'ai récemment refoulé mon code d'avoir une meilleure structure, mais soudainement, je reçois un problème très étrange. Le code ci-dessus doit exécuter une commande et stocker 'foo' avec si la commande a été exécuté correctement. Ce code est à l'intérieur d'un android asynctack (fil), donc j'utilise «PublierProgress» pour montrer un toast. P> Je me retourne dans le débogueur et le foo est vrai! Les toasts montrent que foo d'être vrai tout aussi. Cependant, il va de l'avant et saute à l'intérieur du bloc IF et l'exécute aussi. Je n'ai jamais vu cela auparavant, je pense que c'est un problème avec Java. Je marchais si la fonction "exécutecommand" et on dirait que cela saute des déclarations de retour de retour aussi. P> J'ai couru le code sur un périphérique virtuel et un vrai et ils font tous les deux cela. P > Des idées? Je suis complètement à perte ici. P> p>
6 Réponses :
Vous avez dit Retirez le point-virgule, il doit être P> if (foo == false) {//your code}
Oh mec, je me sens comme un idiot. Je ne peux pas croire manquer ce point-virgule là-bas! J'ai passé beaucoup de temps à déboguer "exécuterecommand" penser que le problème était là-haut ... Quoi qu'il en soit, merci d'avoir repéré que pour moi!
Supprimer le point-virgule: si (foo == false); code> -> if (foo == faux) code> p> p> P>
Vous mettez un point-virgule après De cette façon, votre relevé Modifiez votre code comme celui-ci: P> si code> instruction. si code> est présenté seul et le bloc de code suivant est toujours en cours d'exécution. P> handleRequest(String str) {
boolean foo = executeCommand(str);
this.publishProgress("FOO1: " + foo);
if (foo == false) {
this.publishProgress("FOO2: " + foo);
sendString("Failed to execute: " + str);
}
this.publishProgress("FOO3: " + foo);
sendEOM();
}
Il n'y aura pas de ";" point-virgule après la déclaration. p>
donc au lieu de si (foo == false); code> il devrait être si (foo == false) {} code> p> p> p> P>
Je ne sais pas comment cette ligne compile si (foo == false); code>, mais il fait évidemment. Vous devez supprimer le point-virgule à la fin de la ligne, car d'autres ont mentionné. Avec le ; Là, cela signifie rien faire si foo est faux. Ensuite, le programme passe dans le bloc suivant entre les deux bretelles frisées.
Vous devez installer Findbugs ou PMD pour avertir sur ce type de fautes de frappe. P>
Si vous écrivez un point-virgule (;) après si la déclaration, il termine la condition si vous y êtes!
Vous devez commencer un bloc de code après avoir écrit si la condition I.e.
if(foo == false){
// block of Code
} //end of if condition
Supprimer le point-virgule après la déclaration IF
Pas votre problème, mais plus propre et plus clair pour utiliser
si (! Foo) code> à la place.@ DimO414 Droite, je devais être frustré au moment où j'ai posté ceci, alors je l'ai changé pour "foo == false" pour que ce soit tellement expliquée, je n'aurais pu rien avoir vu de mal.