根据具有空值的EditText处理TextView的更改

问题描述

我在名为“ deviseValue”的EditText上使用TextChangedListener,并对其进行操作以显示sellValuebuyValue中其他两个TextView的值,如下所示:如下:

deviseValue.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s,int start,int count,int after) {}
        @Override
        public void onTextChanged(CharSequence s,int before,int count) {}
        @Override
        public void afterTextChanged(Editable s) {
            Double dDeviseValue = Double.valueOf(deviseValue.getText().toString());
            Double sellResult = dDeviseValue*dSellValue;
            Double buyResult = dDeviseValue*dBuyValue;
            sellValue.setText(sellResult.toString());
            buyValue.setText(buyResult.toString());
        }
    });

当我删除所有deviseValue的值(即EMPTY)时,一切正常,但是我的应用程序崩溃了!

如何处理这种情况,以便当用户删除所有值时,deviseValue会自动变为>1。?

解决方法

应用程序崩溃,因为您尝试将字符串值从edittext转换为double值。但是,当您清除edittext时,deviseValue.getText()。toString()为“”(空)。这就是为什么出现NumberFormatException的原因。

在将deviseValue.getText()。toString()转换为double之前,请尝试检查它。 例如:

String dDeviseText = etEmail.getText().toString();
Double dDeviseValue = Double.valueOf(dDeviseText.isEmpty() ? "1" : dDeviseText);

并且您应该避免为此编辑文本输入非数字字符。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...