Aller au contenu

gerer plusieurs exceptions quand on effectu un calcul


pyrro

Recommended Posts

Posté(e)

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

Posté(e)

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

Posté(e)

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

}

});

Posté(e)

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 ?

  • 2 weeks later...
Posté(e)

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 ?

Posté(e)

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

}

}

});

Posté(e)

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!

Posté(e)

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"

Posté(e)

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

Posté(e)

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

}

}

});

Posté(e)

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

Posté(e)

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

Posté(e)

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 ?

Posté(e)

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.

Posté(e)

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

Posté(e)

                    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.

Posté(e)

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

Posté(e)

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

Posté(e)

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.

Posté(e)
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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...