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.
Utilisez ce qui suit.
a = e1.getText().toString().trim();
b = e2.getText().toString().trim();
if (a.equals("") && b.equals("") ){
}
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();
}
}
});
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.
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.
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
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);
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);
}
}
});
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