为什么这段代码抛出NumberFormatException无效的int:“”?

时间:2014-02-20 02:05:49

标签: android android-edittext numberformatexception

如果用户没有在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;

5 个答案:

答案 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实用程序,可以检查字符串是空还是空。 查看isEmptyisBlank

答案 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;
}