Aller au contenu

gerer plusieurs exceptions quand on effectu un calcul


pyrro

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

Lien vers le commentaire
Partager sur d’autres 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); }

}

});

Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...

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

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

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

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

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

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

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

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

                    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

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

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

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

Archivé

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

×
×
  • Créer...