带有TextWatchers和EditText的转换器

时间:2016-05-02 21:35:29

标签: android android-studio textwatcher

我尝试创建一个包含多个TextWatcherEditText的小型转换器,例如:

m: enter value /m space

km: enter value //km space

当您引入一个值,例如2000米(在米空间中)时,您将在公里空间中看到2公里。这是我的代码:

etm.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {

            double m=0, cmetres;
            DecimalFormat df = new DecimalFormat("#.#####");
            if(etm.hasFocus()) {
                String et1c = s.toString();


                if ("R$0,00".equals(s.toString())){

               longkm = 0;

                etkm.setText("" + df.format(longkm));


                } else {
                    if (et1c.equals("")) {
                        cmetres = 1;

                    } else {
                        m = Double.parseDouble(et1c);
                        cmetres = 0;
                    }

                    if ((cmetres == 0)) {


                       //CONVERSION CODE

                        etkm.setText("" + df.format(longkm));
                   }
                }
            }
        }
    });

    etkm .addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            double km = 0, ckm;

            DecimalFormat df1 = new DecimalFormat("#.########");

            if (etkm.hasFocus()) {
                String et2c = s.toString();


                if ("R$0.00".equals(s.toString())) {

                  longm=0;


                    etm.setText("" + df1.format(longm));

                } else {
                    if (et2c.equals("")) {

                        ckm = 1;
                    } else {
                        km = Double.parseDouble(et2c);
                        ckm = 0;
                    }

                    if (ckm == 0) {
                        //conversion code
                        etm.setText("" + df1.format(longmk));

                    }
                }
            }
        }
    });

问题是这个代码在模拟器上完美运行但是当我删除一些小数时,应用程序在我的手机上崩溃,例如:1,11或0.0001等... 谢谢。

2 个答案:

答案 0 :(得分:0)

我相信你得到的是java.lang.NumberFormatException: Invalid double: ",",它不是数字格式的一部分,你也不能输入文字。

解决方案:

<EditText
    ......
    android:inputType="numberDecimal"/>

允许您仅输入有效数字/字符,允许用于定义有效数字。

答案 1 :(得分:0)

Okey我用这段代码解决了它:

 DecimalFormat df1 = new DecimalFormat("#.###");
            DecimalFormatSymbols sym = DecimalFormatSymbols.getInstance();
            sym.setDecimalSeparator('.');
            df1.setDecimalFormatSymbols(sym);

谢谢大家!美好的一天!