簡體   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