如果用户没有在EditText框中输入值,我试图获取它,初始值设置为0(以防止崩溃错误NumberFormatException Invalid int:“”)抛出假设,因为没有要读取的整数值,因为在这种情况下用户没有输入一个。
我最近尝试了很多这样的事情:
String boozeAmount = boozeConsumed.getText().toString();
if (boozeAmount == "" || boozeAmount == null){
boozeConsumed.setText("0");
boozeAmount = boozeConsumed.getText().toString();
}
int boozeOz = Integer.parseInt(boozeAmount) * 12;
double beerCalc = boozeOz * 4 * 0.075;
但它似乎仍然抛出相同的错误,不确定为什么int值没有被设置为0?
上的投掷错误
int boozeOz = Integer.parseInt(boozeAmount) * 12;
答案 0 :(得分:1)
你不要将字符串与==进行比较,你将它与.equals()
进行比较答案 1 :(得分:1)
将其更改为:
if (boozeAmount.equals("") || boozeAmount == null)
虽然也可能最安全:
if (...)
{
// just set it to zero and skip even trying to parse
}
else
{
// do the actual parsing
}
答案 2 :(得分:1)
if (boozeAmount == "" || boozeAmount == null){
可以从您的解释中轻松推断出此特定if
语句正在返回true
,这就是您的字符串值未设置为“0”的原因。
Java中的字符串不是原始的,即它们无法与比较器==
进行比较。
您需要使用方法equals
来比较字符串,如boozeAmount.equals("")
。
Apache Commons有一个StringUtils实用程序,可以检查字符串是空还是空。
查看isEmpty
和isBlank
。
答案 3 :(得分:1)
每当从EditText获取字符串值时,总是修剪该变量以避免EditText中的任何white spaces
。
String boozeAmount = boozeConsumed.getText().toString().trim(); // apply Trim
// Always compare strings with `equals()` method in Java & Android
if ( boozeAmount.equals( "" ) || boozeAmount == null )
{
boozeConsumed.setText("0");
boozeAmount = boozeConsumed.getText().toString();
}
int boozeOz = Integer.parseInt(boozeAmount) * 12;
double beerCalc = boozeOz * 4 * 0.075;
答案 4 :(得分:1)
您可以检查它是否为空,然后用0和填充它,然后获取输入。
此外,始终将字符串值与.equals
进行比较,并使用.trim()
删除空格,以便将其识别为无效输入。
if (boozeConsumed.getText().toString().trim().equals("")) {
// if (boozeConsumed.length() == 0) { // doesn't consider spaces though
boozeConsumed.setText("0");
}
String boozeAmount = boozeConsumed.getText().toString();
int boozeOz = Integer.parseInt(boozeAmount) * 12;
double beerCalc = boozeOz * 4 * 0.075;
或者只是这样做,因为如果您知道那里没有任何内容,则无需将其解析为整数:
String boozeAmount = boozeConsumed.getText().toString();
int boozeOz = 0;
double beerCalc = 0;
if (boozeAmount.trim().equals("") || boozeAmount == null){
boozeConsumed.setText("0");
boozeAmount = boozeConsumed.getText().toString();
} else {
// only parse it if there's something there
boozeOz = Integer.parseInt(boozeAmount) * 12;
beerCalc = boozeOz * 4 * 0.075;
}