Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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
Java 处理空白的EditText和带字符的EditText异常?(最好进入Discription)_Java_Android_Android Studio_Textview_Runtimeexception - Fatal编程技术网

Java 处理空白的EditText和带字符的EditText异常?(最好进入Discription)

Java 处理空白的EditText和带字符的EditText异常?(最好进入Discription),java,android,android-studio,textview,runtimeexception,Java,Android,Android Studio,Textview,Runtimeexception,我创建了一个将货币从美元转换为卢比的应用程序。当我输入美元金额时,按下按钮后,它将转换为卢比。结果金额的变量类型为double。现在,如果我在编辑文本中输入字符,而不是数字,然后按下按钮,应用程序就会崩溃。当我保持编辑文本为空并按下按钮时,也会发生同样的情况。很明显,我们不能将字符转换为双卢比。现在,如何通过保持应用程序不会崩溃来处理这些运行时错误。我试图寻找类似的问题,但并不满意。(如果需要,请询问我有关问题的更多信息) ActivityMain.java LogCat错误日志(在EditTe

我创建了一个将货币从美元转换为卢比的应用程序。当我输入美元金额时,按下
按钮后,它将转换为卢比。结果金额的
变量
类型为
double
。现在,如果我在编辑文本中输入
字符
,而不是数字,然后按下
按钮
,应用程序就会崩溃。当我保持编辑文本为空并按下
按钮时,也会发生同样的情况。很明显,我们不能将字符转换为双卢比。现在,如何通过保持应用程序不会崩溃来处理这些运行时错误。我试图寻找类似的问题,但并不满意。(如果需要,请询问我有关问题的更多信息)

ActivityMain.java

LogCat错误日志(在EditText中键入单个“A”字符后)

LogCat错误日志(将EditText保持为空后)


要防止在输入中输入除十进制数字以外的任何内容,请在XML格式的EditText中添加以下属性:

android:inputType="numberDecimal"
要防止应用程序在进行转换时崩溃,请检查输入的长度是否大于0:

String enteredAmount = EnteredAmount.getText().toString();
if (enteredAmount.length > 0) {
    Double ConvertedAmount = (Double.parseDouble(EnteredAmount.getText().toString()));
    Double Rupees = ConvertedAmount * 71.64;


    Log.i("Converted Amount", String.valueOf(Rupees));


    Toast.makeText(MainActivity.this, String.format("%.2f",Rupees) + "Rs", Toast.LENGTH_SHORT).show();
} else {
    //do nothing or notify the user that the input can't be empty"
}

1-您需要强制键盘仅为数字,这可以通过在
EditText
XML中使用
inputType
来完成:

android:inputType="numberDecimal"
2-您需要处理空字符串的情况(空白输入)

3-为确保用户不会在
EditText
中复制字符,您可以为此创建一个简单的方法:

private boolean containsChar(String input){
   return input.contains("A-Za-z ");
   // you can add any special chars need to avoid after A-Za-z for example A-Za-z+-*/
}
所以你的最后一次点击可以是这样的

String s = EnteredAmount.getText().toString();
if(s.isEmpty()){
    Toast.makeText(MainActivity.this, "you must enter a value to converted",
                   Toast.LENGTH_SHORT).show();
}else if(containsChar(s)){
    Toast.makeText(MainActivity.this, "can't contain chars",
                   Toast.LENGTH_SHORT).show();
}else{
   // do operation here
}

可以为空间添加更多属性吗。因为它在我在EditText中输入空格时出错。你可以像“A-Za-z*-+/”那样添加它。我会编辑答案。你可以搜索正则表达式以获取更多信息>>editedas我告诉过你实现了containsChar方法,但它仍然无法处理该错误,应用程序继续崩溃。该方法工作正常,如果需要,您也可以使用不同的场景进行测试。如果您试图涵盖不同的案例,请告诉meandroid:inputType=“numberDecimal”此方法看起来不够。你能试着为同样的东西生成逻辑吗?你说的“看起来不够”是什么意思?它将阻止用户输入除
01234567890以外的任何内容。
。根据应用程序标准,这可能是最好的方法。但我想处理不同的场景,比如保持空白,输入字符,输入空格。对于不同的场景,我想要不同的吐司。作为一名学习者,我需要先了解这些事情,而不是直接去做最好的事情。谢谢。我还是安卓的noob。我想学习它的所有属性。我真的很感激你的回答,但我期待一些java逻辑来处理这些情况。。。。非常感谢。
android:inputType="numberDecimal"
if(EnteredAmount.getText().toString().isEmpty()){
    Toast.makeText(MainActivity.this, "you must enter a value to converted",
                   Toast.LENGTH_SHORT).show();
}
private boolean containsChar(String input){
   return input.contains("A-Za-z ");
   // you can add any special chars need to avoid after A-Za-z for example A-Za-z+-*/
}
String s = EnteredAmount.getText().toString();
if(s.isEmpty()){
    Toast.makeText(MainActivity.this, "you must enter a value to converted",
                   Toast.LENGTH_SHORT).show();
}else if(containsChar(s)){
    Toast.makeText(MainActivity.this, "can't contain chars",
                   Toast.LENGTH_SHORT).show();
}else{
   // do operation here
}