J'ai eu du mal avec cela ces derniers jours / semaines.

  1. Appuyez sur le bouton «C» ou «Supprimer».
  2. Appuyez sur n'importe quel bouton opérateur

  3. Voici une vidéo présentant le problème (hébergée sur vid.me ~ 34 Mo)

  4. Lien vers le dépôt contenant le code que je débogue. (Github)

L'erreur

Tl; dr

  • à com.andela.currencycalc.math.MathOperations.equals (MathOperations.java:53)
  • à com.andela.currencycalc.buttons.ButtonHandler.equalsButtonClicked (ButtonHandler.java:61)
  • à com.andela.currencycalc.MainActivity.equalsButtonClickHandler (MainActivity.java:36)

Erreur entière

04-04 17:55:50.906 8497-8497/com.andela.currencycalc E/AndroidRuntime: FATAL EXCEPTION: main
Process:com.andela.currencycalc, PID: 8497java.lang.IllegalStateException: Could not execute method for android:onClick
at android.view.View$DeclaredOnClickListener.onClick(View.java:4452)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4447)
at android.view.View.performClick(View.java:5198) 
at android.view.View$PerformClick.run(View.java:21147) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: java.lang.NumberFormatException: Invalid float: ""
at java.lang.StringToReal.invalidReal(StringToReal.java:63)
at java.lang.StringToReal.parseFloat(StringToReal.java:308)
at java.lang.Float.parseFloat(Float.java:306)
at com.andela.currencycalc.math.MathOperations.equals(MathOperations.java:53)
at com.andela.currencycalc.buttons.ButtonHandler.equalsButtonClicked(ButtonHandler.java:61)
at com.andela.currencycalc.MainActivity.equalsButtonClickHandler(MainActivity.java:36)
at java.lang.reflect.Method.invoke(Native Method) 
at android.view.View$DeclaredOnClickListener.onClick(View.java:4447) 
at android.view.View.performClick(View.java:5198) 
at android.view.View$PerformClick.run(View.java:21147) 
at android.os.Handler.handleCallback(Handler.java:739) 
-1
vibin thomas 4 avril 2017 à 16:01

2 réponses

Meilleure réponse

À partir de votre code, je peux dire que vous vous trompez ici, alors remplacez votre code par la méthode equals de la classe MathOperations

if(!TextUtils.isEmpty(displayHandler.getDisplay().getText().toString())) {

    displayHandler.addToSecondDisplay(buttonHandler.getOperandSpinner().getSelectedItem().toString(),
                    Float.parseFloat(displayHandler.getDisplay().getText().toString()), "");

    calculate();

}

Cela vérifiera le texte nul et vide avant l'analyse.

0
Wasim K. Memon 4 avril 2017 à 13:19

Provoqué par: java.lang.NumberFormatException: Float non valide: ""
...
sur com.andela.currencycalc.math.MathOperations.equals ( MathOperations.java:53 )
...

Vous appelez Float.parseFloat (string) avec la chaîne vide comme argument.

Vous devriez vérifier l'entrée avant cette méthode ou attraper cette exception et gérer cette situation de manière significative.
Ou vous pouvez essayer de trouver un autre moyen de garantir que l'entrée est un flottant valide.

0
RobCo 4 avril 2017 à 13:13