0
votes

La méthode Terminer () ne fonctionne pas de la méthode OptionsItemsElected dans Android

J'essaie d'appeler la méthode Terminer () pour fermer l'activité lorsque l'utilisateur n'entraîne rien dans le champ eittext et clique sur l'élément de menu avec ID item_1 .

Mais chaque fois que j'essaye cela, l'activité n'est pas fermée et que le programme passe aux lignes suivantes (et finalement fini par une exception).

Je sais que je peux Manipulez cette exception différemment (et gérez également l'exception en cochant d'abord la chaîne vide, puis utilisez le integer.parseint pour l'éviter) mais je veux savoir pourquoi le finition () La méthode ne fonctionne pas et le programme passe aux lignes suivantes. Et je veux arrêter le code d'ici pour fermer l'activité.

J'ai lu un problème similaire, mais Ce n'a pas répondu à ma question. J'ai également confirmé que le programme passe aux lignes suivantes en ajoutant des grumes verbales. J'ai également essayé avec ActivityClassname.Chis.Finish () Mais ça ne fonctionne toujours pas. Code: xxx


12 commentaires

Quelle est l'exception?


Terminer () N'arrête pas immédiatement l'exécution de code dans l'activité . Cela se produira asynchrone. Mettez le code problématique dans un else bloc là-bas.


@Speed ​​java.lang.numberformatException: Int invalide: "" - Pour appeler l'integer.parseint sur une chaîne vide


@Mikem. Merci, il est plus clair maintenant, mais comment puis-je arrêter le code d'ici pour fermer l'activité?


ajouter "retour;" Après la fin de la finale (), peut-être que l'application frappe l'exception avant que l'appel de finition puisse être rempli, donc en appelant retour; Le linge de Conde continue.


Tu ne le fais pas. finition () finira par fermer l'activité ; Cela arrive juste de manière asynchrone. Structure de votre code pour que vous n'appeliez rien après la touche () appel.


En plus de ce que les autres affiches ont dit, l'application s'écrase car votre Weightfield est vide. Vérifiez une chaîne vide avant d'appeler parseint ()


@ Jochimhaglund Merci, ajoutant le "retour"; géré cela. Peut-être que cela frappe l'exception avant que la méthode d'arrivée soit complètement exécutée.


@Mikem. Merci, je vais restructurer le code.


@Mikem. Je serais très reconnaissant si quelqu'un me permet de savoir pourquoi il y a un vote de descente dans la question, cela m'aidera à l'avenir. J'ai suivi les normes Stackoverflow en faisant une question directe via une situation et un code clairs et en ajoutant ma recherche de la référence de ce que j'avais trouvé à cet égard. Merci.


Les lignes directrices pour la descente sont dans une info-bulle sur ce bouton: "Cette question ne montre aucun effort de recherche; il n'est pas clair ou pas utile". Il est assez clair que vous demandez, alors peut-être pas utile, ni manque de recherche? C'est un problème assez courant.


@Mikem. Merci d'avoir souligné, j'ai eu un peu déçu de voir le vote au bas


3 Réponses :


0
votes
    private void insertWeight() {
    String weightString = edt1.getText().toString().trim();
    if (weightString.isEmpty()) {
        Log.v("MainActivity", "Test: Weight is EMPTY!!!");
        finish();
    }
    if (weightString != null && !weightString.trim().isEmpty()) {
        int i = Integer.parseInt(weightString);
        Log.v("MainActivity", "Test: Weight is- " + i);
    }
}
Here you need to check if string is not empty and not null then you will print Weight else NumberFormatException occurs.

1 commentaires

Merci mais je suis au courant de gérer l'exception, je voulais juste savoir pourquoi la méthode finition () ne fonctionnait pas. Le commentaire de Mike répond probablement



0
votes

J'espère que cela fonctionnera pour vous

écrire en dessous de la méthode xxx

appeler cette méthode donnée ci-dessous xxx


1 commentaires

Merci mais je suis au courant de gérer l'exception, je voulais juste savoir pourquoi la méthode finition () ne fonctionnait pas. Le commentaire de Mike répond probablement



0
votes

Les commentaires combinés de Mikem. et Joachim Haglund répond à ma question-

"Terminer () n'arrête pas immédiatement l'exécution du code dans l'activité. Cela se produira de manière asynchrone." - Mikem.

"Ajouter" retour; "Après la fin de la fin (), l'application frappe peut-être l'exception avant que l'appel de finition puisse être rempli, alors en appelant le retour; le linge de colère continue à aller." - Joachim Haglund

(NB: Je ne sais pas le moyen de marquer des commentaires combinés comme la réponse à Stackoverflow, donc je le fais manuellement)


0 commentaires