Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当编辑文本中没有值时,Android应用程序崩溃_Android_Crash_Android Edittext_Textwatcher - Fatal编程技术网

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

当编辑文本中没有值时,Android应用程序崩溃,android,crash,android-edittext,textwatcher,Android,Crash,Android Edittext,Textwatcher,我正在制作一个单位转换器,但如果我没有在编辑文本中输入任何值并按下计算按钮,应用程序将崩溃,错误为无效浮点:。另外,我想禁止在数字之前输入零,例如0300。我如何做到这一点 //handle calculate calcButton=(Button)findViewById(R.id.calcButton); calcButton.setOnClickListener(new View.OnClickListener() { @Override

我正在制作一个单位转换器,但如果我没有在编辑文本中输入任何值并按下计算按钮,应用程序将崩溃,错误为无效浮点:。另外,我想禁止在数字之前输入零,例如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;
                }
            }
        }
    });

}

您可能会引发NumberFormatException,因为EditText字段文本是且不是有效的浮点值,所以会在以下行引发异常:

amount = Float.valueOf(unit_edit.getText().toString());
您需要做的是在尝试获取字符串的浮点值之前添加一些验证和检查


查看方法文档了解更多详细信息

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

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,因此无需担心。如果您仍然需要与之相关的内容,请告诉我,我将编辑我的答案。

这可能有助于您的EditText将输入限制为仅数字

 <EditText
     android:id="@+id/unit_edit"
     android:inputType="number"
 />
您还可以限制数字、数字类型(如十进制)

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

如果您也可以发布异常,这将非常理想。也许您应该使用unit_edit.getText==null而不是unit_edit.getText.toString.equalsnull