pyrro Posté(e) 21 septembre 2010 Share Posté(e) 21 septembre 2010 voila j'ai un calcul qui s'effectue avec deux valeurs entrées dans des edittext quand on click sur un bouton, mais j'aimerais gérer toutes les erreurs possible avec un try catch. j'ai essayer de faire un log erreur mais il ne m'affiche rien dans le logcat. je voudrais pour l'instant gérer les 3 erreurs suivantes: - afficher un message d'erreur quand le champs edittext 1 est vide - afficher un message d'erreur quand le champs edittext 2 est vide - afficher un message d'erreur quand les 2 champs sont vides voici le bout de code correspondant : buttonpourcent.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { try{ float pdd = Float.parseFloat(prixdedepart.getText().toString()); int prt = Integer.parseInt(pourcent.getText().toString()); float result = pdd -((prt*pdd)/100); String res = String.valueOf(result); prixapresremise.setText(res); } catch(NumberFormatException e){ // Log.e("mon erreur",e.getMessage()); if (prixdedepart==null && pourcent!=null){ tv2.setText(s); } if (prixdedepart!=null && pourcent==null){ tv2.setText(ss); } else if (prixdedepart==null && pourcent==null){ tv2.setText(sss); } } } }); ps: les deux edit text sont : prixdedepart (pdd) et popurcent (prt) je ne comprend pas vraiment le problème, si quelqu'un aurait une idée merci d'avance Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 21 septembre 2010 Share Posté(e) 21 septembre 2010 Le try catch et les Exception sont là pour gérer une erreur (un NullPointerException par exemple) et nop pas pour faire des contrôles Tu devrais utilises des if tout simplement ou des filter avant de faire tes calculs :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 21 septembre 2010 Auteur Share Posté(e) 21 septembre 2010 Tous d'abord merci de ta réponse, tu pense que je devrait plutôt faire un truc du genre : public void onClick(View v) { float pdd = Float.parseFloat(prixdedepart.getText().toString()); int prt = Integer.parseInt(pourcent.getText().toString()); if (prixdedepart==null && pourcent!=null){ tv2.setText(s); } else if (prixdedepart!=null && pourcent==null){ tv2.setText(ss); } else if (prixdedepart==null && pourcent==null){ tv2.setText(sss); } else { float result = pdd -((prt*pdd)/100); String res = String.valueOf(result); prixapresremise.setText(res); } } }); Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 21 septembre 2010 Share Posté(e) 21 septembre 2010 Oui :) Le try catch pourra intervenir dans le cas d'une division par zéro ou si l'user essaye de rentrer des lettres, et encore tu peux éviter en utilisant des filters :D Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 21 septembre 2010 Auteur Share Posté(e) 21 septembre 2010 je voudrais aussi par la suite bannir l'entré de lettre dans les champs c'est pour cela que j'avais opter pour un try catch. En quoi consiste les filters ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 4 octobre 2010 Auteur Share Posté(e) 4 octobre 2010 Un petit up vu que mon code ne marche pas pourtant je n voit pas se qui cloche : buttonpourcent.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { float pdd = Float.parseFloat(prixdedepart.getText().toString()); int prt = Integer.parseInt(pourcent.getText().toString()); if (prixdedepart==null && pourcent!=null){ tv2.setText(s); } else if (prixdedepart!=null && pourcent==null){ tv2.setText(ss); } else if (prixdedepart==null && pourcent==null){ tv2.setText(sss); } else { float result = pdd -((prt*pdd)/100); String res = String.valueOf(result); prixapresremise.setText(res); } } }); J'ai dans le logcat : unable to parse " as integer et donc une erreur sur le onClick est ce que quelqu'un aurait une ptite idée ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 4 octobre 2010 Share Posté(e) 4 octobre 2010 Integer.ValueOf() ne fonctionne pas mieux? :P Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 4 octobre 2010 Auteur Share Posté(e) 4 octobre 2010 En fait mon calcul marche mais c'est au moment ou je laisse un des champs vide l'application se ferme et quand je passe avec Integer.ValueOf() [color=red][b]sa[/b][/color] me met change type of result to string je remet mon code que j'ai légèrement modifier : buttonpourcent.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { float pdd = Integer.parseInt(prixdedepart.getText().toString()); int prt = Integer.parseInt(pourcent.getText().toString()); float result = pdd -((prt*pdd)/100); String res = String.valueOf(result); prixapresremise.setText(res); if (prixdedepart==null){ tv2.setText(s); } else if (pourcent==null){ tv2.setText(ss); } else if (prixdedepart==null && pourcent==null){ tv2.setText(sss); } } }); Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 4 octobre 2010 Share Posté(e) 4 octobre 2010 Bien oui, Fluckysan avait deviné au post 2, tu as un NullPointer! if (prixdedepart.getText()!=null && pourcent.getText()==null) tes calculs else Toast("Veuillez remplir les 2 champs texte!") (désolé trop fade pour réécrite le Toast, ce sera ta prochaine découverte ;-) PS, n'hésite pas à corriger tes fautes qui passent en rouge! Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 4 octobre 2010 Auteur Share Posté(e) 4 octobre 2010 En effet un toast serais plus approprié mais je cherche a faire un message d'erreur spécifique pour chaque champs de saisies car j'avais cela fonctionnais très bien quand je me servait d'un try catch. j'avais en cas d'erreur un message qui s'affichait avec " remplir les deux champs" mais je voudrais un message spécial pour chaque champs. En gros je voudrais faire : si les 2 champs sont remplis => le calcul se fait si le champs 1 est vide =>un toast avec "champs 1 vide" si le champs 2 est vide =>un toast avec "champs 2 vide" Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 4 octobre 2010 Share Posté(e) 4 octobre 2010 if (prixdedepart.getText()==null) Toast("Veuillez remplir les champ de depart!") else if (pourcent.getText()==null) Toast("Veuillez remplir les champ de pourcent!") else faire calcul Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 4 octobre 2010 Auteur Share Posté(e) 4 octobre 2010 J'ai toujours le unable to parse " as integer dans le logcat quand l'un des champs est vide en revanche mon calcul lui marche très bien. J'y comprend plus rien :( pourtant j'ai bien mis : buttonpourcent.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { float pdd = Integer.parseInt(prixdedepart.getText().toString()); int prt = Integer.parseInt(pourcent.getText().toString()); float result = pdd -((prt*pdd)/100); String res = String.valueOf(result); if (prixdedepart.getText()==null){ tv2.setText(s); } else if (pourcent.getText()==null){ tv2.setText(ss); } else if (prixdedepart.getText()==null && pourcent.getText()==null){ tv2.setText(sss); } else { prixapresremise.setText(res); } } }); Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 4 octobre 2010 Share Posté(e) 4 octobre 2010 Regarde le numéro de ligne ou ca bloque! Tu verras que c'est avant tes tests, j'en dis pas plus! Tu vas t'en vouloir quand tu auras compris! Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 4 octobre 2010 Auteur Share Posté(e) 4 octobre 2010 Avant mes tests ? Le problème viens de la ligne onClick mais je vois vraiment pas désolé Un petit indice :p Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 4 octobre 2010 Share Posté(e) 4 octobre 2010 Copie ici ta ligne d'erreur du logcat et la ligne de code correspondante, cela va peut-être t'aider à comprendre :P Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 4 octobre 2010 Auteur Share Posté(e) 4 octobre 2010 Je pense que sa devrait se situer par la : public void onClick(View v) { float pdd = Integer.parseInt(prixdedepart.getText().toString()); int prt = Integer.parseInt(pourcent.getText().toString()); float result = pdd -((prt*pdd)/100); String res = String.valueOf(result); Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 4 octobre 2010 Share Posté(e) 4 octobre 2010 Donc, la ligne 74 de ton programme est... (normalement dans Eclipse, les numéros de ligne sont affichés) et tu vois bien le numéro 74 dans ce que tu as surligné, non :P Je parie que c'est : float pdd = Integer.parseInt(prixdedepart.getText().toString()); Réfléchis un peu.. Dans ton code, tu mets ensuite: if (prixdedepart.getText()==null Ne serait il pas intéressant à ton avis, de faire le "if" avant d'aller chercher le toString()? Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 4 octobre 2010 Auteur Share Posté(e) 4 octobre 2010 Mais c'est bizarre même en supprimant le calcul si je ne fait que cela : buttonpourcent.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { if (prixdedepart.getText()==null){ tv2.setText(s); } else if (pourcent.getText()==null){ tv2.setText(ss); } else if (prixdedepart.getText()==null && pourcent.getText()==null){ tv2.setText(sss); } Cela ne m'affiche rien pourtant ca devrait au moins m'afficher les messages d'erreur non ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 4 octobre 2010 Share Posté(e) 4 octobre 2010 Hey, il va falloir a un moment commencer à se débrouiller seul. Commence avec un simple if else et regarde dans quel cas tu es. tu rajouteras ensuite les autres conditions, mais analyse les une par une pour être certain de bien comprendre. Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 4 octobre 2010 Auteur Share Posté(e) 4 octobre 2010 C'est effectivement se que j'ai fait rien ne marche lol pas de changement avec un deux ou trois if c'est pas grave je vais chercher, je le noterais si j'ai trouvé la solution Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 4 octobre 2010 Share Posté(e) 4 octobre 2010 if (prixdedepart.getText()==null){ tv2.setText("C'est null"); } else tv2.setText("C'est pas null"); essaye de bien maitriser cela... Puis tu passes à if (prixdedepart.getText()==null){ tv2.setText("C'est null"); } else if (pourcent.getText()==null){ tv2.setText("C'est null"); } else... sorry, mais je vais devoir te laisser apprendre tout seul à ce niveau ci. Tu as toutes les billes en main pour terminer ton programme. Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 5 octobre 2010 Share Posté(e) 5 octobre 2010 Le problème est que tester le résultat du getText() avec null ne sert pas à grand chose, getText() retournant dans ce cas une chaine vide (ce qui différent d'une référence nulle). Change ton test if (prixdedepart.getText()==null) par if (TextUtils.isEmpty(prixdedepart.getText())) ça devrait mieux fonctionner... Et pour parfaire le tout, je rajouterai même un petit trim : if (TextUtils.isEmpty(prixdedepart.getText().trim())) Cf la javadoc de String et de TextUtils pour plus de précisions Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 5 octobre 2010 Auteur Share Posté(e) 5 octobre 2010 Tout d'abord merci beaucoup chpil c'était exactement sa le problème sa marche juste 2 petite questions si possible. quoi sert ce trim() ? et peut on combiner les deux champs vides comme cela car [color=red][b]sa[/b][/color] nemarche pas : else if (TextUtils.isEmpty(prixdedepart.getText()) && TextUtils.isEmpty(pourcent.getText())){ tv2.setText(sss); ?? thanks Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 5 octobre 2010 Auteur Share Posté(e) 5 octobre 2010 en fait j'ai trouver pas de soucis fallait mettre cette possibilité en premier logique sinon il affiche que le nombre vide :p Merci beaucoup pour toutes les réponses apportées en tous cas. Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 6 octobre 2010 Share Posté(e) 6 octobre 2010 quoi sert ce trim() ? Tu es allé voir la Javadoc que j'indiquais en lien ?? Sans l'appel à trim(), ton test ne fonctionnera pas comme tu le souhaites si ton utilisateur saisit un espace dans la zone de saisie PS: il t'en a déjà été fait la remarque, mais pourrais-tu faire un effort d'orthographe et de grammaire, car certains de tes messages sont vraiment à la limite du compréhensible Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.