Ошибка, когда EditText пуст (невозможно проанализировать '' как целое число) - PullRequest
0 голосов
/ 29 марта 2012

У меня есть кнопка и текст редактирования. Пользователь вводит число и затем нажимает кнопку. Что-то происходит с этим номером.

Однако я получаю сообщение об ошибке, когда текст редактирования пуст. Как это исправить? Мой код ниже моя попытка .. но он не работает, так как я получаю следующую ошибку, и мое приложение закрывается:

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 ]

2 голосов
/ 29 марта 2012

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

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

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

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

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

if(!TextUtils.isEmpty(text)) {
    //Use it
}else {
    //display validation message
}
0 голосов
/ 29 марта 2012

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

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

}catch(NumberFormatException ex){
//Some toast or alert
}
0 голосов
/ 29 марта 2012
if (!d.equals("")&&d!=null){
    Integer depositAmount = Integer.valueOf(d);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...