java.lang.NumberFormatException: Ungültige int: "" AUSNAHME
Wenn der Benutzer die edittext leer ist, tritt ein Fehler auf java.lang.NumberFormatException: Ungültige int: "".
Der Fehler kommt in Zeile
if (a=="" && b=="")
und auch in Zeile
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
Jemand eine Idee, wie das zu lösen stack trace Fehler.
- zeigen Sie Ihre logcat??
- Sie haben, um die a -, b-Werte in der onclick-Methode..bevor es "" nur..
- ändern, wenn (a=="" && b=="") if (ein.length()==0 || b.length()==0) alert sollte rised Ereignis a leer oder b ist emmpty
- Sie, dass der check nicht getan werden sollte.. wat wenn das edittext gefüllt mit einem Leerzeichen, oder auch andere chars? gleiche Nummer format exception occour.. Diese Prüfung ist ok, wenn der Benutzer verlässt das edittext leer.
- mögliche Duplikate von Wie kann ich strings vergleichen im Java?
- gut, ich sehe, Ihr oponion, also, der beste Weg für diesen Fall ist zu versuchen und fangen die parse-Methode, wenn keine Ausnahme ausgelöst wird, benachrichtigt den Benutzer über Ihre/seine falschen Angaben, andernfalls akzeptieren Sie einfach die Nummer
- genau... das ist die perfekte Lösung,
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie folgenden.
Wenn wir
.equals()
noch die chanceNumberFormatException
, weil, wenn der Benutzer ein Leerzeichen oder ein Sonderzeichen Ausnahme entstehen. Ändern Sie Ihren code wie dieser..Nicht verwenden
==
für string-Vergleich. Sehen Wie Vergleiche ich strings in Java?Da bist du Parsen Benutzer bereitgestellten Eingabe, sollten Sie die Ausnahme abfangen und behandeln der parse-Fehler entsprechend.
Die Sie konvertieren Sie Ihre edittext Wert die Zeichenfolge, wie unten im code
So dass Sie
statt
und eine weitere Sache, die Sie ändern müssen, ist, diese Zeile
mit
Für den Artikel:
versuchen Sie dies:
Die mir geholfen haben vor einiger Zeit ein sehr ähnliches problem
bitte ändern Sie wie unten
});
Zunächst sollten Sie vergleichen von string-Werten mit
==
- operator, Anstatt Sie verwenden solltenequals()
Methode aus der String-Klasse.Nächsten Ändern.
Ändern die oben genannten Dinge, und dein code sollte funktionieren, perfekt.
Das Problem ist irreführend, es ist über die Größe von integer, da java int: 2^32-1, Ihre ganze Zahl von 10 Ziffern log, zB: 0123456789.
Allerdings, wenn die ganze Zahl ist 11 Ziffern, z.B.: 0123456789***1***. dann müssen Sie die Verwendung von BigInteger finden Sie unter: https://developer.android.com/reference/java/math/BigInteger.html
Dies ist möglicherweise ein wenig spät, aber ich bin sicher, es hilft jemand in der Zukunft.
Müssen Sie nest Strings a und b in die onclick.Ich hab das mit mir und funktionierte reibungslos.