2016-12-23 2 views
-2

J'essaie de faire un calcul avec un bouton, après la saisie de l'utilisateur. Lorsque je ne remplis pas les champs et que j'appuie sur le bouton, mon programme se bloque, mais je veux juste faire griller un message .. J'ai lu beaucoup d'autres problèmes similaires, mais je ne comprends pas ce que je dois faire pour réparer dans mon code .. Y a-t-il quelqu'un qui peut m'aider? Merci ..Android, double invalide: "" champ vide bloque le programme

activity_main.xml:

<EditText 
    android:layout_width="130dp" 
    android:layout_height="wrap_content" 
    android:inputType="numberDecimal" 
    android:ems="10" 
    android:id="@+id/editText1"/> 

<EditText 
    android:layout_width="130dp" 
    android:layout_height="wrap_content" 
    android:inputType="numberDecimal" 
    android:ems="10" 
    android:id="@+id/editText2"/> 

<EditText 
    android:layout_width="130dp" 
    android:layout_height="wrap_content" 
    android:inputType="numberDecimal" 
    android:ems="10" 
    android:id="@+id/editText3"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="" 
    android:id="@+id/textView1"/> 

<Button 
    android:layout_width="65dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/calculateButton 
    android:background="@android:drawable/ic_menu_edit" /> 

MainActivity.java:

...... 
mEditText1 = (EditText)findViewById(R.id.editText1); 
mEditText2 = (EditText)findViewById(R.id.editText2); 
mEditText3 = (EditText)findViewById(R.id.editText3); 
mTextView = (TextView)findViewById(R.id.textView1); 
cButton = (Button)findViewById(R.id.calculateButton); 
    cButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //When the button is clicked, call the calucate method. 
      calculate(); 
     } 
    }); 

...... 

public void calculate(){ 

    Double value1 = Double.parseDouble(mEditText1.getText().toString()); 
    Double value2 = Double.parseDouble(mEditText2.getText().toString()); 
    Double value3 = Double.parseDouble(mEditText3.getText().toString()); 
    if((value1!=0)&&(value2!=0)) { 

     if ((value1 != null) && (value2 != null) && (value3 != null)) { 
      calculatedValue = (value2 * value3)/value1; 
      mTextView.setText(calculatedValue.toString());} 
    else { 
      Toast.makeText(getApplicationContext(), "Please fill them all", Toast.LENGTH_LONG).show(); 
      } 
} 

L'erreur que je reçois est:

12-22 20:09:26.694 18523-18523/com.example.nigi.myapplication E/AndroidRuntime: FATAL EXCEPTION: main 
    java.lang.NumberFormatException: Invalid double: "" 
    at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
    at java.lang.StringToReal.parseDouble(StringToReal.java:248) 
    at java.lang.Double.parseDouble(Double.java:295) 
    at android.view.View.performClick(View.java:4442) 
    at android.view.View$PerformClick.run(View.java:18473) 
    at android.os.Handler.handleCallback(Handler.java:733) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5105) 

Merci!

+0

Mettre en oeuvre try ... catch .. où vous obtenez accident –

+1

Je me demande pourquoi ' ""' ne peut pas être considéré comme un numéro valide? parce que Java ne convertit pas '" "' à '0'. –

+0

Double valeur1 = Double.parseDouble (String.valueOf (mEditText1.getText())); Double value2 = Double.parseDouble (String.valueOf (mEditText2.getText())); Double value3 = Double.parseDouble (String.valueOf (mEditText3.getText())); au lieu de votre crash de code est résolu –

Répondre

1

Utilisez ce code:

public void calculate() 
{   
     if(String.valueOf(mEditText1.getText()).length() == 0)  
     mEditText1.setError("Required only alphabets");  
     else if(String.valueOf(mEditText2.getText()).length() == 0)  
     mEditText2.setError("Required only alphabets");  
     else if(String.valueOf(mEditText3.getText()).length() == 0) 
      mEditText3.setError("Required only alphabets");  
     else{ 
     Double value1 = Double.parseDouble(String.valueOf(mEditText1.getText())); 
     Double value2 = Double.parseDouble(String.valueOf(mEditText2.getText())); 
     Double value3 = Double.parseDouble(String.valueOf(mEditText3.getText())); 
     calculatedValue = (value2 * value3)/value1; 
     mTextView.setText(calculatedValue.toString()); 
     } 
} 
+0

Vous savez que cela provoquera la même exception exacte? L'analyse des doubles est le problème ici. Vous devez vérifier l'entrée avant qu'elle soit analysée – 0xDEADC0DE

+0

Ya vous avez raison, @ 0xDEADC0DE, MERCI D'INFORMER –

+0

Cela fonctionne très bien !! Merci beaucoup !!! :) –