2017-04-19 66 views
0

我正在制作一个应用程序,用于转换不同单位的长度。假设您想将2米转换为厘米。您必须在输入类型为numberDecimal的EditText中输入值,然后在微调器中选择米,然后选择将其转换为另一个微调器中的厘米。我想让应用程序完全自动化,并决定添加一个TextWatcher。问题是,当你删除EditText中的所有内容时,它显然无法乘以或除以零(不为0,没有任何内容)并执行方法,因此它崩溃了应用程序。有没有解决这个问题的方法?我已经试过这一点,但它仍然崩溃: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(); 
      } 
     } 
    }); 

这里是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) 

预先感谢您:)

编辑:新的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 

回答

0

我已经找到了解决我的问题。 if方法的布尔值不正确。这是正确的方法:

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

无论如何,谢谢!

2

java.lang.NumberFormatException:无效的双精度:“”

无法比较空字符串Double的值。您仍然可以检查editText是否有任何价值:如果是,请致电您的计算方法。试试这个:

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(); 
      } 
     } 

希望这会有所帮助。

+1

已经尝试过了,没有工作。 –

+0

仍然崩溃?你可以显示错误日志吗?这一定不能与上面相同。 – tahsinRupam

+0

我认为它仍在执行lengthConverter(),因为我得到相同的错误(无效的双倍:“”)。我在想也许默认值(当没有文本时)不是“”,而是其他的东西。 –

0

我会做两件事情在这里: 首先确保长度> 0.第二个是检查,以确保它确实是可变的。例如不只是“ - ”或“。”。但类似于###

+0

仍然没有工作:( –

0

确保lengthEntry具有正确的输入字段。您可以尝试System.out.println();查看长度和输入。

并尝试通过Doube.parseDouble(lenghtEntry.getText().toString());解析值。

有这个相同的问题和ID是不正确的。

+0

ID是正确的 –

0

改变你的条件,你onTextChange应该是这样的:

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

    } 
+0

nope :(仍然不是 –

+0

再次尝试,我添加一个默认值,如果这不起作用,也许问题是在'lengthConverter();'方法。 – AlexGuerra