2017-04-19 4 views
0

Ich mache eine App, um Längen in verschiedenen Einheiten zu konvertieren. Nehmen wir an, Sie möchten 2 Meter in Zentimeter umrechnen. Sie müssen den Wert in einen EditText eingeben, der inputType ist numberDecimal, dann Meter in einem Drehfeld auswählen und dann auswählen, um es in Zentimeter in einem anderen Drehfeld zu konvertieren. Ich wollte die App vollständig automatisieren und entschied mich für einen TextWatcher. Problem ist, wenn Sie alles im EditText löschen, kann es natürlich nicht multiplizieren oder dividieren durch nichts (nicht 0, nichts) und führen Sie die Methoden aus, und so stürzte die App ab. Gibt es eine Lösung für das Problem? Ich habe dies versucht, aber es abgestürzt noch:Standardwert von EditText

final EditText lengthEntry = (EditText) findViewById(R.id.enterLength); 
lengthEntry.addTextChangedListener(new TextWatcher() { 
final EditText lengthEntry = (EditText) findViewById(R.id.enterLength); 
    lengthEntry.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 
     @Override 
     public void afterTextChanged(Editable s) {} 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if (Double.valueOf(lengthEntry.getText().toString()) == ""){} else { 
       lengthConverter(); 
      } 
     } 
    }); 

Hier ist die logcat:

FATAL EXCEPTION: main 
Process: n1.theconverter, PID: 5585 
java.lang.NumberFormatException: Invalid double: "" 
    at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
    at java.lang.StringToReal.parseDouble(StringToReal.java:267) 
    at java.lang.Double.parseDouble(Double.java:301) 
    at java.lang.Double.valueOf(Double.java:338) 
    at n1.theconverter.MainActivity$3.afterTextChanged(MainActivity.java:87) 
    at android.widget.TextView.sendAfterTextChanged(TextView.java:8007) 
    at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:10168) 
    at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1043) 
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:560) 
    at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:225) 
    at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:224) 
    at android.view.inputmethod.BaseInputConnection.deleteSurroundingText(BaseInputConnection.java:244) 
    at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:389) 
    at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:78) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Danke im Voraus :)

bearbeiten: neue logcat:

java.lang.NumberFormatException: Invalid double: "" 
                   at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
                   at java.lang.StringToReal.parseDouble(StringToReal.java:267) 
                   at java.lang.Double.parseDouble(Double.java:301) 
                   at java.lang.Double.valueOf(Double.java:338) 
                   at n1.theconverter.MainActivity.lengthConverter(MainActivity.java:176) 
                   at n1.theconverter.MainActivity$3.onTextChanged(MainActivity.java:91) 
                   at android.widget.TextView.sendOnTextChanged(TextView.java:7991) 
                   at android.widget.TextView.handleTextChanged(TextView.java:8053) 
                   at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:10157) 
                   at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1033) 
                   at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:559) 
                   at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:225) 
                   at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:224) 
                   at android.text.method.BaseKeyListener.backspaceOrForwardDelete(BaseKeyListener.java:106) 
                   at android.text.method.BaseKeyListener.backspace(BaseKeyListener.java:51) 
                   at android.text.method.BaseKeyListener.onKeyDown(BaseKeyListener.java:215) 
                   at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:138) 
                   at android.widget.TextView.doKeyDown(TextView.java:6098) 
                   at android.widget.TextView.onKeyDown(TextView.java:5911) 
                   at android.view.KeyEvent.dispatch(KeyEvent.java:2640) 
                   at android.view.View.dispatchKeyEvent(View.java:9234) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at com.android.internal.policy.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2395) 
                   at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1727) 
                   at android.app.Activity.dispatchKeyEvent(Activity.java:2725) 
                   at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:541) 
                   at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59) 
                   at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:319) 
                   at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59) 
                   at com.android.internal.policy.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2310) 
                   at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4127) 
                   at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4089) 
                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                   at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787) 
                   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
                   at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844) 
                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                   at android.view.ViewRootImpl$AsyncInputStage.forwa 
04-19 20:38:03.451 6053-6053/n1.theconverter D/AndroidRuntime: Shutting down VM 


                  --------- 
beginning of crash 
04-19 20:38:03.451 6053-6053/n1.theconverter E/AndroidRuntime: FATAL EXCEPTION: main 
                  Process: n1.theconverter, PID: 6053 
                  java.lang.NumberFormatException: Invalid double: "" 
                   at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
                   at java.lang.StringToReal.parseDouble(StringToReal.java:267) 
                   at java.lang.Double.parseDouble(Double.java:301) 
                   at java.lang.Double.valueOf(Double.java:338) 
                   at n1.theconverter.MainActivity.lengthConverter(MainActivity.java:176) 
                   at n1.theconverter.MainActivity$3.onTextChanged(MainActivity.java:91) 
                   at android.widget.TextView.sendOnTextChanged(TextView.java:7991) 
                   at android.widget.TextView.handleTextChanged(TextView.java:8053) 
                   at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:10157) 
                   at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1033) 
                   at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:559) 
                   at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:225) 
                   at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:224) 
                   at android.text.method.BaseKeyListener.backspaceOrForwardDelete(BaseKeyListener.java:106) 
                   at android.text.method.BaseKeyListener.backspace(BaseKeyListener.java:51) 
                   at android.text.method.BaseKeyListener.onKeyDown(BaseKeyListener.java:215) 
                   at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:138) 
                   at android.widget.TextView.doKeyDown(TextView.java:6098) 
                   at android.widget.TextView.onKeyDown(TextView.java:5911) 
                   at android.view.KeyEvent.dispatch(KeyEvent.java:2640) 
                   at android.view.View.dispatchKeyEvent(View.java:9234) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at com.android.internal.policy.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2395) 
                   at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1727) 
                   at android.app.Activity.dispatchKeyEvent(Activity.java:2725) 
                   at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:541) 
                   at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59) 
                   at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:319) 
                   at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59) 
                   at com.android.internal.policy.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2310) 
                   at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4127) 
                   at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4089) 
                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                   at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787) 
                   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
                   at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844) 
                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3 

Antwort

0

ich die Lösung für mein Problem gefunden zu haben. Der Boolesche Wert der if-Methode war falsch. Hier ist der richtige Weg:

if (lengthEntry.getText().toString().isEmpty()){ 
    tvAnswer.setText("0.0"); 
} else { 
    lengthConverter(); 
} 

Danke trotzdem!

2

java.lang.NumberFormatException: Invalid double: ""

Sie können keine leere Zeichenfolge mit Double Wert vergleichen. Trotzdem können Sie überprüfen, ob editText irgendeinen Wert hat: Wenn ja, dann rufen Sie Ihre Berechnungsmethode auf. Versuchen Sie dies:

private EditText lengthEntry; //Declare globally 

lengthEntry = (EditText) findViewById(R.id.enterLength); 
lengthEntry.addTextChangedListener(new TextWatcher() { 
@Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if (!lengthEntry.getText().toString().equals("")){ 
       lengthConverter(); 
      } 
     } 

Hoffe, dass dies hilft.

+1

Bereits versucht es, hat nicht funktioniert. –

+0

Noch stürzt ?? Können Sie bitte das Fehlerprotokoll anzeigen? Dies muss nicht dasselbe wie oben sein. – tahsinRupam

+0

Ich denke, es ist immer noch längeConverter() ausführen, weil ich den gleichen Fehler bekomme (Invalid double: ""). Ich dachte, vielleicht ist der Standardwert (wenn es keinen Text gibt) nicht "", sondern etwas anderes. –

0

Ich würde 2 Dinge hier tun: Zuerst sicherstellen, dass die Länge> 0 ist. Die zweite ist zu überprüfen, dass es tatsächlich änderbar ist. z.B. nicht nur "-" oder ".". Aber etwas wie - #. #

+0

Immer noch nicht funktioniert :( –

0

Stellen Sie sicher, dass die lengthEntry die richtige ID des Eingabefeldes haben. und Sie können versuchen, System.out.println(); zu sehen, die Länge und Eingabe.

Und versuchen Sie, den Wert von Doube.parseDouble(lenghtEntry.getText().toString()); zu analysieren.

Hatte das gleiche Problem und ID war nicht korrekt.

+0

Die ID ist korrekt –

0

Ihr Zustand ändern, sollten Sie Ihre onTextChange wie folgt aussehen:

@Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if (s.equals(""){ 
      lengthEntry.setText("0"); 
     } else { 
      lengthConverter(); 
     } 

    } 
+0

nope :(immer noch nicht –

+0

Versuchen Sie es erneut, ich füge einen Standardwert hinzu, wenn das nicht funktioniert vielleicht ist das Problem in Ihrer 'lengthConverter();' Methode. – AlexGuerra