2012-03-29 2 views
0

У меня есть кнопка и текст. Пользователь вводит номер и затем нажимает кнопку. Что-то происходит с этим числом.Ошибка, когда 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(); 
    } 
} 

}

ответ

2

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

Когда вы делаете 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(); 
    } 
} 
0
if (!d.equals("")&&d!=null){ 
    Integer depositAmount = Integer.valueOf(d); 
} 
+0

Или, с уровня API 9, вы можете использовать [isEmpty()] (http://developer.android.com/reference/java/lang/String.html#isEmpty()). И вы можете включить оператор 'else' в случае, если' d' пуст. – Jakar

0

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

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

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

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

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

if(!TextUtils.isEmpty(text)) { 
    //Use it 
}else { 
    //display validation message 
} 
Смежные вопросы