2017-07-03 1 views
-4

Ich versuche, eine einfache Zeit Rechner App mit zwei EditText Felder zu erstellen. Der unten stehende Code ist nur ein normaler Rechner, der zwei Zahlen addiert, die ich aufgepeitscht habe, um den Text-geänderten Listener zu testen. Aus irgendeinem Grund stürzt es jedes Mal ab, wenn ich diese Anwendung starte und eine Zahl in EditText-Felder einfüge, und frage, ob ich die App neu starten möchte. Ich möchte nur, dass die Summe jedes Mal aktualisiert wird, wenn der Benutzer die Eingabe einer Nummer beendet, anstatt einen Knopf drücken zu müssen. Kann mir jemand helfen, den Fehler zu finden? Ich habe die ersten paar Variablen außerhalb der onCreate-Methode initialisiert.EditText AfterTextChanged Problem

Log Fehler:

07-03 21:06:45.499 2397-2397/com.example.thesoulreaper.swimmingcalculator E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.example.thesoulreaper.swimmingcalculator, PID: 2397 
    java.lang.NumberFormatException: empty String 
     at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1071) 
     at java.lang.Float.parseFloat(Float.java:459) 
     at com.example.thesoulreaper.swimmingcalculator.OneHundredCalculatorActivity$3.afterTextChanged(OneHundredCalculatorActivity.java:103) 
     at android.widget.TextView.sendAfterTextChanged(TextView.java:8202) 
     at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:10381) 
     at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1218) 
     at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:579) 
     at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:230) 
     at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:229) 
     at android.view.inputmethod.BaseInputConnection.deleteSurroundingText(BaseInputConnection.java:251) 
     at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:451) 
     at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:91) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:154) 
     at android.app.ActivityThread.main(ActivityThread.java:6077) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 

Mein Code:

fiftyEditText = (EditText) findViewById(R.id.FiftyEditText); 
    hundredEditText = (EditText) findViewById(R.id.HundredEditText); 
    totalTextView = (TextView) findViewById(R.id.totalTextView); 

    fiftyEditText.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     } 

     @Override 
     public void afterTextChanged(Editable editable) { 
      if(Integer.parseInt(hundredEditText.getText().toString()) > 0 && Integer.parseInt(fiftyEditText.getText().toString()) > 0) { 
       int total = Integer.parseInt(hundredEditText.getText().toString()) + Integer.parseInt(fiftyEditText.getText().toString()); 
       totalTextView.setText(total); 
      } else if(Integer.parseInt(hundredEditText.getText().toString()) <= 0 && Integer.parseInt(fiftyEditText.getText().toString()) > 0) { 
       totalTextView.setText(Integer.parseInt(fiftyEditText.getText().toString())); 
      } else if(Integer.parseInt(hundredEditText.getText().toString()) > 0 && Integer.parseInt(fiftyEditText.getText().toString()) <= 0) { 
       totalTextView.setText(Integer.parseInt(hundredEditText.getText().toString())); 
      } else if (Integer.parseInt(hundredEditText.getText().toString()) <= 0 && Integer.parseInt(fiftyEditText.getText().toString()) <= 0) { 
       totalTextView.setText(0); 
      } 
     } 
    }); 

    hundredEditText.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     } 

     @Override 
     public void afterTextChanged(Editable editable) { 
      if(Integer.parseInt(hundredEditText.getText().toString()) > 0 && Integer.parseInt(fiftyEditText.getText().toString()) > 0) { 
       int total = Integer.parseInt(hundredEditText.getText().toString()) + Integer.parseInt(fiftyEditText.getText().toString()); 
       totalTextView.setText(total); 
      } else if(Integer.parseInt(hundredEditText.getText().toString()) <= 0 && Integer.parseInt(fiftyEditText.getText().toString()) > 0) { 
       totalTextView.setText(Integer.parseInt(fiftyEditText.getText().toString())); 
      } else if(Integer.parseInt(hundredEditText.getText().toString()) > 0 && Integer.parseInt(fiftyEditText.getText().toString()) <= 0) { 
       totalTextView.setText(Integer.parseInt(hundredEditText.getText().toString())); 
      } else if (Integer.parseInt(hundredEditText.getText().toString()) <= 0 && Integer.parseInt(fiftyEditText.getText().toString()) <= 0) { 
       totalTextView.setText(0); 
      } 
     } 
    }); 
+0

Können zeigen Sie das Protokoll Fehler entdeckt? –

+0

Es gibt keinen Fehler, es funktioniert einfach nicht –

+0

Es muss eine Logcat Nachricht geben ... –

Antwort

0

Ihre Anwendung abstürzt, weil Sie leere Zeichenfolge zu konvertieren integer so fügen Sie einen Scheck, wenn die Zeichenfolge nicht leer ist

versuchen
@Override 
public void afterTextChanged(Editable editable) { 

    int hundredEditTextValue = hundredEditText.getText().toString().isEmpty() ? 0 : Integer.parseInt(hundredEditText.getText().toString()); 
    int fiftyEditTextValue = fiftyEditText.getText().toString().isEmpty() ? 0 : Integer.parseInt(fiftyEditText.getText().toString()); 

    if(hundredEditTextValue > 0 && fiftyEditTextValue > 0) { 
     int total = hundredEditTextValue + fiftyEditTextValue; 
     totalTextView.setText(String.valueOf(total)); 
    } else if(hundredEditTextValue <= 0 && fiftyEditTextValue > 0) { 
     totalTextView.setText(String.valueOf(fiftyEditTextValue)); 
    } else if(hundredEditTextValue > 0 && fiftyEditTextValue <= 0) { 
     totalTextView.setText(String.valueOf(hundredEditTextValue)); 
    } else if (hundredEditTextValue <= 0 && fiftyEditTextValue <= 0) { 
     totalTextView.setText(String.valueOf(0)); 
    } 
} 

und nur um Ihren edittext akzeptiert nur Zahlen fügen Sie dies in Ihrem XML

android: input = "number"

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    . 
    . 
    android:inputType="number" /> 
+0

Danke, es hat super funktioniert –

+0

Bitte upvote die Antwort, wenn es Ihnen geholfen hat. –

Verwandte Themen