EditText为空时出错(无法解析''作为整数)

时间:2012-03-29 00:13:44

标签: java android numberformatexception

我有一个按钮和一个edittext。用户输入一个数字,然后单击该按钮。然后用这个号码发生了一些事情。

但是当edittext为空时我收到错误。我该如何解决?我的下面的代码是我的尝试..但它不起作用,因为我收到以下错误,我的应用程序关闭:

E / AndroidRuntime(324):java.lang.NumberFormatException:无法解析''为整数

public void onClick(View arg0) {
    // TODO Auto-generated method stub
    switch (arg0.getId()) {
    case R.id.bBankDeposit:
        deposit();
        break;
    case R.id.bBankWithdraw:
        withdraw();
        break;
    }
}

public void deposit() {
    String d = etDepositAmount.getText().toString();
    Integer depositAmount = Integer.valueOf(d);

    if (depositAmount > playerCash | depositAmount <= 0
            | etDepositAmount.getText().toString() == "") {
        new AlertDialog.Builder(this).setTitle("Wait")
                .setMessage("Please enter a valid deposit value.")
                .setPositiveButton("OK", null).show();
        etDepositAmount.setText("");
    } else {
        int newBankBalance = playerBalance + depositAmount;
        playerBalance = newBankBalance;
        playerCash = (playerCash - depositAmount);

        bankBalance.setText("Bank Balance: $" + playerBalance);
        cash.setText("Cash in hand: $" + playerCash);
        etDepositAmount.setText("");

        Player stats = new Player(this);
        stats.open();
        stats.bankDeposit(playerId, playerCash, playerBalance);
        stats.close();
    }
}

}

4 个答案:

答案 0 :(得分:2)

您的解决方案背后的想法是正确的,您只是有一些轻微的语法错误。

执行Integer.valueOf(string)时,您需要处理数字格式异常。这只是Java让你知道它可以可靠地返回给定字符串的Integer的方式。

|是一个按位OR运算。大概你想要||,它使用布尔逻辑进行比较。其次,在比较要按值而不是按引用进行比较的字符串时。 ==通过引用进行比较,而someString.equals(someOtherString)实际上会检查字符串的内容。你真的不需要那样做,因为你已经把它解析成一个整数。

通过这些修复,您可以确定输入是否不正确,并在必要时显示警告。

所以 - 完整的解决方案是......

public void deposit() {
    String d = etDepositAmount.getText().toString();
    Integer depositAmount = 0;
    try
    {
       depositAmount = Integer.valueOf(d);
    }
    catch(NumberFormatException ex)
    {
       // Uh oh! Bad input!
    }

    if (depositAmount > playerCash || depositAmount <= 0) 
    {
        new AlertDialog.Builder(this).setTitle("Wait")
                .setMessage("Please enter a valid deposit value.")
                .setPositiveButton("OK", null).show();
        etDepositAmount.setText("");
    } else {
        int newBankBalance = playerBalance + depositAmount;
        playerBalance = newBankBalance;
        playerCash = (playerCash - depositAmount);

        bankBalance.setText("Bank Balance: $" + playerBalance);
        cash.setText("Cash in hand: $" + playerCash);
        etDepositAmount.setText("");

        Player stats = new Player(this);
        stats.open();
        stats.bankDeposit(playerId, playerCash, playerBalance);
        stats.close();
    }
}

答案 1 :(得分:0)

if (!d.equals("")&&d!=null){
    Integer depositAmount = Integer.valueOf(d);
}

答案 2 :(得分:0)

你必须抓住NumberFormatException

String s ="";
int i=0;
try{
i=Integer.parseInt(s);

}catch(NumberFormatException ex){
//Some toast or alert
}

答案 3 :(得分:0)

您必须检查编辑文本的空值以解决NumberFormatException

请参阅此代码以检查nullblank

的值
if(!TextUtils.isEmpty(text)) {
    //Use it
}else {
    //display validation message
}