我有一个按钮和一个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();
}
}
}
最佳答案
解决方案背后的想法是正确的,只是存在一些较小的语法错误。
当您执行Integer.valueOf(string)
时,您需要处理数字格式异常。这只是Java的一种让您知道它可以可靠地为给定字符串返回Integer的方式。|
是按位或运算。大概您想要||
,它使用布尔逻辑进行比较。其次,在比较字符串时,您想按值而不是按引用进行比较。 ==
通过引用进行比较,而someString.equals(someOtherString)
实际上将检查字符串的内容。但是,您实际上确实不需要这样做,因为您已经将其解析为Integer。
使用这些修复程序,您将找出输入是否错误,并在必要时显示警报。
所以-完整的解决方案是....
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();
}
}