繁体   English   中英

EditText的空值

[英]Empty value of EditText

我正在制作一个旨在将长度转换为不同单位的应用程序。 假设您要将2米转换为厘米。 您必须在EditText中输入值,其inputType为numberDecimal,然后在微调器中选择米,然后在另一个微调器中选择将其转换为厘米。 我想使该应用程序完全自动化,并决定添加一个TextWatcher。 问题是,当您删除EditText中的所有内容时,它显然不能乘以或除以零(不是0,什么都没有)并执行方法,因此使应用程序崩溃。 有什么解决办法吗? 我已经尝试过了,但是仍然崩溃了:

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

java.lang.NumberFormatException:无效的double:“”

您不能将空字符串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();
            } 
        }

希望这可以帮助。

我将在这里做两件事:首先确保THE LENGTH>0。第二是检查以确保它确实是可更改的。 例如,不仅是“-”或“。”。 但是类似-#。#

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

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

遇到同样的问题,ID不正确。

更改您的条件,您的onTextChange应该如下所示:

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

    }

我已经找到解决问题的方法。 if方法中的布尔值不正确。 这是使用isEmpty()方法执行此操作的正确方法:

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

不管怎么说,还是要谢谢你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM