Noplait Posté(e) 4 février 2011 Share Posté(e) 4 février 2011 Bonsoir à tous, Je suis en train d'apprendre à programmer avec android, j'avais quasiment fini ma 1ère application. Et je me suis rendu du compte d'un bug en passant de l'émulateur sur un vrai téléphone. C'est une application simple de calcul. Ce qui me pose problème c'est le formatage du résultat avec 2 décimales. Mon code fonctionne sur l'émulateur mais me provoque un force close sur un vrai téléphone (HTC desire + Htc Wildfire). Voici le bout de code qui pose problème : //Formatage DecimalFormat df = new DecimalFormat(); df.setMaximumFractionDigits(2); DoubleResultat2 = Double.parseDouble(df.format(DoubleResultat)); J'ai 2 editext à partir desquels je récupère les valeurs en string. Je convertis ensuite le string en double avec un catch numberexception pour vérifier si l'utilisateur a bien entré un nombre et j'affiche le résultat du calcul dans une textview. .... public static double DoubleCAM; public static double DoubleALB; public static double DoubleResultat; public static double DoubleResultat2; ..... BtnCalculer.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { // Toast Context context = getApplicationContext(); CharSequence text = "Veuillez entrer des chiffres uniquement !"; int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text, duration); // Récupère les données String StringCAM = EditTextCAM.getText().toString(); String StringALB = EditTextALB.getText().toString(); // Verifie qu'on a entré un nombre try { //Calcul DoubleCAM = Double.valueOf(StringCAM); DoubleALB = Double.valueOf(StringALB); DoubleResultat = DoubleCAM + 0.025*(40-DoubleALB); } catch (NumberFormatException n) {toast.show();} //Formatage DecimalFormat df = new DecimalFormat(); df.setMaximumFractionDigits(2); DoubleResultat2 = Double.parseDouble(df.format(DoubleResultat)); // Affichage du résultat TextViewResultat.setText("Résultat = " + String.valueOf(DoubleResultat2)); } } ); Ce code fonctionne sur l'émulateur. Pas sur le téléphone :( (???) Quand j'enlève le bout de code pour le formatage cela le calcul fonctionne sur le téléphone aussi. J'ai essayé de mettre le Formatage décimal dans le try{} il me renvoit systématiquement sur le toast, en gros NumberException. Auriez vous une idée de correction pour mon code ou tout simplement une autre méthode pour gérer les décimales. Merci beaucoup. Ca fait 3 heures que je m'arrache les cheveux là dessus :D Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 5 février 2011 Share Posté(e) 5 février 2011 Si tu as un ForceClose, tu dois avoir une trace dans les logs. Peux-tu nous donner la trace de l'exception qui se produit ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Noplait Posté(e) 5 février 2011 Auteur Share Posté(e) 5 février 2011 Merci pour ta réponse, En fait je suis sous ubuntu 9.04 et je n'arrive pas à faire reconnaître mon desire sous adb et quand je dis que l'erreur se produit sur le téléphone c'est parce que je compile l'apk et installe manuellement sur mon téléphone ^^ Je vais essayer de faire ça sous windows et de trouver l'exception. Edit : bon j'ai réussi à régler ce problème de permissions avec adb :) Voici le log sur mon htc desire : 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): FATAL EXCEPTION: main 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): java.lang.NumberFormatException: 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at org.apache.harmony.luni.util.FloatingPointParser.parseDblImpl(Native Method) 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:283) 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at java.lang.Double.parseDouble(Double.java:287) 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at com.mediformules.Cacorr$1.onClick(Cacorr.java:68) 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at android.view.View.performClick(View.java:2421) 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at android.view.View$PerformClick.run(View.java:8867) 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at android.os.Handler.handleCallback(Handler.java:587) 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at android.os.Handler.dispatchMessage(Handler.java:92) 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at android.os.Looper.loop(Looper.java:143) 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at android.app.ActivityThread.main(ActivityThread.java:5068) 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at java.lang.reflect.Method.invokeNative(Native Method) 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at java.lang.reflect.Method.invoke(Method.java:521) 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at dalvik.system.NativeStart.main(Native Method) Edit2 : Bon j'ai finalement résolu le problème. Pour ceux que ça intéresse, pour formater à 2 décimales : //Formatage DecimalFormat df = new DecimalFormat("0.00"); // Affichage du résultat TextViewResultat.setText("Résultat = " + df.format(DoubleResultat)); C'est tout de même curieux que eclipse ne me donne pas d'erreur sur l'ancien code et ce qui est encore plus bizarre c'est que j'avais réussi à faire fonctionner cet ancien code sur mon ancienne ROM c'est en changeant de ROM pour une ROM DesireHD que le problème s'est revelé. Tchao 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.