Jump to content

Archived

This topic is now archived and is closed to further replies.

pyrro

gerer plusieurs exceptions quand on effectu un calcul

Recommended Posts

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

Share this post


Link to post
Share on other sites

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 :)

Share this post


Link to post
Share on other sites

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

}

});

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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 ?

Share this post


Link to post
Share on other sites

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 ?

Share this post


Link to post
Share on other sites

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

}

}

});

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

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"

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

}

}

});

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

Avant mes tests ?

Le problème viens de la ligne onClick mais je vois vraiment pas désolé

Un petit indice :p

Share this post


Link to post
Share on other sites

Copie ici ta ligne d'erreur du logcat et la ligne de code correspondante, cela va peut-être t'aider à comprendre :P

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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 ?

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

                    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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites





×
×
  • Create New...