当编辑文本中没有值时,Android应用程序崩溃

时间:2015-10-04 22:55:28

标签: android crash android-edittext textwatcher

我正在创建一个单位转换器,但是如果我没有在编辑文本中输入任何值并按下计算按钮,则应用程序崩溃并显示错误Invalid float: ""。另外,我想禁止在数字之前输入零(例如0300)。我该如何做到这一点?

   //handle calculate
   calcButton=(Button)findViewById(R.id.calcButton);

    calcButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Spinner spinner = (Spinner) findViewById(R.id.unit_spinner);
            String spinnerText = spinner.getSelectedItem().toString();
            EditText unit_edit = (EditText) findViewById(R.id.unit_edit);
            amount = Float.valueOf(unit_edit.getText().toString());

            if (unit_edit.getText().toString().equals(null)) {
                Toast.makeText(getApplicationContext(), "Insert Value To Convert",
                        Toast.LENGTH_LONG).show();
            } else {

                switch (spinnerText) {
                    case "Kilograms":
                        kilograms = amount;
                        grams = amount * 1000;
                        ListView();
                        break;
                    case "Grams":
                        grams = amount;
                        kilograms = amount / 1000;
                        ListView();
                        break;
                }
            }
        }
    });

}

3 个答案:

答案 0 :(得分:0)

由于NumberFormatException字段文本为EditText""不是有效""值,因此您可能会收到float,因此抛出异常在以下行:

amount = Float.valueOf(unit_edit.getText().toString());

在尝试获取float的{​​{1}}值之前,您需要做的是添加一些验证和检查。

查看方法文档以获取更多详细信息http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#valueOf(java.lang.String)

答案 1 :(得分:0)

您无法解析空值以进行浮动。您应首先测试它是否为空,然后执行您想要的操作,如下所示:

String text = unit_edit.getText().toString();
if(!text.isEmpty()){ // Test if the text is empty
    if(text.matches("[0-9]+")){ // Test if it only contains numbers, using REGEX

        amount = Float.valueOf(text); // Only then parse to float.
        // Switch and rest of the stuff

    } else {            
        Toast.makeText(getApplicationContext(), "Use only numbers from 0 to 9.",
                    Toast.LENGTH_LONG).show();
    }
} else {
    Toast.makeText(getApplicationContext(), "The field is empty",
                    Toast.LENGTH_LONG).show();
}

这些评论解释了发生了什么。关于某些数字中的前导0,使用" valueOf"会将其删除,0300将被解析为300,因此无需担心。如果您仍想要与之相关的内容,请告诉我并告知我们编辑我的答案。

答案 2 :(得分:0)

这可能对EditText仅限输入数字有用。

 <EditText
     android:id="@+id/unit_edit"
     android:inputType="number"
 />

您还可以限制数字,数字类型,如十进制

 <EditText
   android:id="@+id/unit_edit"
   android:digits="0123456789."
   android:inputType="numberDecimal"
 />