web-dev-qa-db-fra.com

java.lang.NumberFormatException: int non valide: "" EXCEPTION

Si l'utilisateur n'a pas renseigné l'edittext, une erreur se produit.

 if (a=="" && b=="")

et aussi à la ligne

 int result = Integer.parseInt(a) + Integer.parseInt(b);
 t1.setText(Integer.toString(result));

Calci.Java

package com.example.calculator;

import Android.app.Activity;
import Android.app.AlertDialog;
import Android.content.Context;
import Android.content.DialogInterface;
import Android.os.Bundle;
import Android.view.View;
import Android.view.inputmethod.InputMethodManager;
import Android.widget.Button;
import Android.widget.EditText;
import Android.widget.TextView;

public class Calci extends Activity {
    TextView t1;
    EditText e1, e2;
    Button add, sub, mul, div;
    Context c=this;

    String b, a;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calci);
        e1 = (EditText) findViewById(R.id.EditText01);
        e2 = (EditText) findViewById(R.id.EditText02);
        add = (Button) findViewById(R.id.add);
        sub = (Button) findViewById(R.id.sub);
        mul = (Button) findViewById(R.id.mul);
        div = (Button) findViewById(R.id.div);
        t1 = (TextView) findViewById(R.id.textView1);
        a = e1.getText().toString();
        b = e2.getText().toString();
add.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {
        if (a=="" && b==""){
                AlertDialog.Builder a1 = new AlertDialog.Builder(c);


                // Setting Dialog Title
                a1.setTitle("Alert Dialog");

                // Setting Dialog Message
                a1.setMessage("PLEASE ENTER SOMETHING");

                a1.setPositiveButton("yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int button1) {
                                // if this button is clicked, close
                                // current activity
                                dialog.cancel();
                            }

                        });

                // Showing Alert Message
                AlertDialog alertDialog = a1.create();
                a1.show();

            }

        else{
            int result = Integer.parseInt(a) + Integer.parseInt(b);
            t1.setText(Integer.toString(result));
            InputMethodManager imm = (InputMethodManager)getSystemService(
                      Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(add.getWindowToken(), 0);
        }

    }

});
    }
}

LogCat:

03-19 15:42:21.165: E/Trace(25381): error opening trace file: Permission denied (13)
03-19 15:42:21.165: D/ActivityThread(25381): setTargetHeapUtilization:0.25
03-19 15:42:21.165: D/ActivityThread(25381): setTargetHeapIdealFree:8388608
03-19 15:42:21.165: D/ActivityThread(25381): setTargetHeapConcurrentStart:2097152
03-19 15:42:21.385: D/libEGL(25381): loaded /system/lib/egl/libEGL_adreno200.so
03-19 15:42:21.465: D/libEGL(25381): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
03-19 15:42:21.475: D/libEGL(25381): loaded /system/lib/egl/libGLESv2_adreno200.so
03-19 15:42:21.475: I/Adreno200-EGL(25381): <qeglDrvAPI_eglInitialize:299>: EGL 1.4 QUALCOMM build:  (Merge)
03-19 15:42:21.475: I/Adreno200-EGL(25381): Build Date: 07/09/13 Tue
03-19 15:42:21.475: I/Adreno200-EGL(25381): Local Branch: AU_41
03-19 15:42:21.475: I/Adreno200-EGL(25381): Remote Branch: 
03-19 15:42:21.475: I/Adreno200-EGL(25381): Local Patches: 
03-19 15:42:21.475: I/Adreno200-EGL(25381): Reconstruct Branch: 
03-19 15:42:21.675: D/OpenGLRenderer(25381): Enabling debug mode 0
03-19 15:42:24.325: D/AndroidRuntime(25381): Shutting down VM
03-19 15:42:24.325: W/dalvikvm(25381): threadid=1: thread exiting with uncaught exception (group=0x41972378)
03-19 15:42:24.395: E/AndroidRuntime(25381): FATAL EXCEPTION: main
03-19 15:42:24.395: E/AndroidRuntime(25381): Java.lang.NumberFormatException: Invalid int: ""
03-19 15:42:24.395: E/AndroidRuntime(25381):    at Java.lang.Integer.invalidInt(Integer.Java:138)
03-19 15:42:24.395: E/AndroidRuntime(25381):    at Java.lang.Integer.parseInt(Integer.Java:359)
03-19 15:42:24.395: E/AndroidRuntime(25381):    at Java.lang.Integer.parseInt(Integer.Java:332)
03-19 15:42:24.395: E/AndroidRuntime(25381):    at com.example.calculator.Calci$1.onClick(Calci.Java:67)
03-19 15:42:24.395: E/AndroidRuntime(25381):    at Android.view.View.performClick(View.Java:4147)
03-19 15:42:24.395: E/AndroidRuntime(25381):    at Android.view.View$PerformClick.run(View.Java:17161)
03-19 15:42:24.395: E/AndroidRuntime(25381):    at Android.os.Handler.handleCallback(Handler.Java:615)
03-19 15:42:24.395: E/AndroidRuntime(25381):    at Android.os.Handler.dispatchMessage(Handler.Java:92)
03-19 15:42:24.395: E/AndroidRuntime(25381):    at Android.os.Looper.loop(Looper.Java:213)
03-19 15:42:24.395: E/AndroidRuntime(25381):    at Android.app.ActivityThread.main(ActivityThread.Java:4787)
03-19 15:42:24.395: E/AndroidRuntime(25381):    at Java.lang.reflect.Method.invokeNative(Native Method)
03-19 15:42:24.395: E/AndroidRuntime(25381):    at Java.lang.reflect.Method.invoke(Method.Java:511)
03-19 15:42:24.395: E/AndroidRuntime(25381):    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:789)
03-19 15:42:24.395: E/AndroidRuntime(25381):    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:556)
03-19 15:42:24.395: E/AndroidRuntime(25381):    at dalvik.system.NativeStart.main(Native Method)
03-19 15:42:25.685: I/Process(25381): Sending signal. PID: 25381 SIG: 9

Tout le monde a une idée de la façon de résoudre ces erreurs de trace de pile.

8
anuj

Utilisez ce qui suit.

 a = e1.getText().toString().trim();    
 b = e2.getText().toString().trim(); 
 if (a.equals("") && b.equals("") ){

 }
7
user3007252

Si nous utilisons .equals(), toujours une chance de NumberFormatException, car si l'utilisateur entre un espace ou des caractères spéciaux, une exception surviendra. Changer votre code comme ça ..

@Override
public void onClick(View arg0) {
try{
        a = e1.getText().toString();
        b = e2.getText().toString();
        int result = Integer.parseInt(a) + Integer.parseInt(b);
        t1.setText(Integer.toString(result));
        InputMethodManager imm = (InputMethodManager)getSystemService(
                  Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(add.getWindowToken(), 0);
    }
 catch(NumberFormatException e)
   {
     AlertDialog.Builder a1 = new AlertDialog.Builder(c);


            // Setting Dialog Title
            a1.setTitle("Alert Dialog");

            // Setting Dialog Message
            a1.setMessage("Filed is Empty or Invalid Number");

            a1.setPositiveButton("yes",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                int button1) {
                            // if this button is clicked, close
                            // current activity
                            dialog.cancel();
                        }

                    });

            // Showing Alert Message
            AlertDialog alertDialog = a1.create();
            a1.show();
  }
  }

  });
2
Antony
if (a=="" && b=="")

N'utilisez pas == pour la comparaison de chaînes. Voir Comment comparer les chaînes en Java?

NumberFormatException

Puisque vous analysez les entrées fournies par l'utilisateur, vous devez intercepter l'exception et gérer l'erreur d'analyse en conséquence.

1
laalto

Tout d'abord, vous ne devriez pas comparer les valeurs de chaîne à l'aide de l'opérateur ==. Vous devez plutôt utiliser la méthode equals() de la classe String.

Prochain changement.

public void onClick(View arg0) 
{
    // First fetch the values of a & b here instead of onCreate() method
      a = e1.getText().toString().trim();    // trim() method will remove any white spaces
      b = e2.getText().toString().trim(); 
     if (a.equals("") && b.equals("") )
     {
    ....

Changer les choses ci-dessus, et votre code devrait fonctionner, parfaitement.

0
Lucifer

Le problème est trompeur, il s’agit de la taille d’un entier, puisque Java int est: 2 ^ 32-1, votre entier peut être un journal à 10 chiffres, par exemple: 0123456789 . Toutefois, si l’entier est à 11 chiffres, par exemple: 0123456789. ***1***. alors vous devez utiliser BigInteger, voir: https://developer.Android.com/reference/Java/math/BigInteger.html

0
Shoresh

Vous convertissez la valeur de votre edittext en chaîne comme ci-dessous dans votre code

a = e1.getText().toString();
b = e2.getText().toString();

Donc vous devez utiliser 

a.equals("") && b.equals("")

au lieu de 

a=="" && b==""

et une dernière chose à changer est que cette ligne

AlertDialog.Builder a1 = new AlertDialog.Builder(c);

avec

AlertDialog.Builder a1 = new AlertDialog.Builder(Calci.this);
0
InnocentKiller

s'il vous plaît faire changer comme ci-dessous,

    add.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
     if (a.equals("") && b.equals("") )
 {
            AlertDialog.Builder a1 = new AlertDialog.Builder(c);


            // Setting Dialog Title
            a1.setTitle("Alert Dialog");

            // Setting Dialog Message
            a1.setMessage("PLEASE ENTER SOMETHING");

            a1.setPositiveButton("yes",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                int button1) {
                            // if this button is clicked, close
                            // current activity
                            dialog.cancel();
                        }

                    });

            // Showing Alert Message
            AlertDialog alertDialog = a1.create();
            a1.show();

        }

    else{
        int result = Integer.parseInt(a) + Integer.parseInt(b);
        t1.setText(""+result);
        InputMethodManager imm = (InputMethodManager)getSystemService(
                  Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(add.getWindowToken(), 0);
    }

}

});

0

Pour la partie:

 int result = Integer.parseInt(a) + Integer.parseInt(b);
        t1.setText(Integer.toString(result));

essaye ça:

int result = Integer.valueOf(a) + Integer.valueOf(b);
        t1.setText(Integer.toString(result));

Cela m'a aidé il y a quelque temps sur un problème très similaire

0
Fraggles