Ошибка, когда 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();
    }
}

}


person gurpsone    schedule 29.03.2012    source источник


Ответы (4)


Идея вашего решения верна, у вас просто есть небольшие синтаксические ошибки.

Когда вы делаете Integer.valueOf(string), вам нужно обработать исключение числового формата. Это просто способ Java сообщить вам, что он может надежно вернуть целое число для данной строки.

| — это побитовая операция ИЛИ. Предположительно, вам нужен ||, который сравнивает с использованием логической логики. Во-вторых, при сравнении строк вы хотите сравнивать по значению, а не по ссылке. == сравнивает по ссылке, а 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();
    }
}
person debracey    schedule 29.03.2012

Вы должны поймать NumberFormatException

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

}catch(NumberFormatException ex){
//Some toast or alert
}
person Yahya Arshad    schedule 29.03.2012

Вы должны проверить пустые значения текста редактирования, чтобы решить NumberFormatException

См. этот код для проверки значений для null или blank

if(!TextUtils.isEmpty(text)) {
    //Use it
}else {
    //display validation message
}
person Dharmendra    schedule 29.03.2012

person    schedule
comment