2014-02-20 10 views
1

Я пытаюсь получить его, если пользователь не вводит значение в поля EditText, для начального значения установлено значение 0 (чтобы предотвратить ошибку сбоя NumberFormatException Invalid int: ""), которая выбрана, потому что там нет целочисленного значения для чтения, так как пользователь не вводил один в этом случае.Почему этот код бросает NumberFormatException Недопустимый int: ""?

Я попробовал несколько вещей, в последнее время это:

String boozeAmount = boozeConsumed.getText().toString(); 

     if (boozeAmount == "" || boozeAmount == null){ 
      boozeConsumed.setText("0"); 
      boozeAmount = boozeConsumed.getText().toString(); 
     } 
     int boozeOz = Integer.parseInt(boozeAmount) * 12; 
     double beerCalc = boozeOz * 4 * 0.075; 

Но, кажется, все-таки бросить ту же ошибку, не знаю, почему значения ИНТ не быть установлен в 0?

Бросив ошибку на

int boozeOz = Integer.parseInt(boozeAmount) * 12; 

ответ

1
if (boozeAmount == "" || boozeAmount == null){ 

Из вашего объяснения можно легко вывести, что этот конкретный оператор if возвращает true, поэтому ваше строковое значение не установлено на «0».

Строки в Java не являются примитивными, то есть они не могут сравниться с компаратором ==. Для сравнения строк необходимо использовать метод equals, как в boozeAmount.equals("").

У Apache Commons есть утилита StringUtils, которая может проверять, являются ли строки пустыми или пустыми. Отъезд isEmpty и isBlank.

1

вы не сравнить строки с == сравнить его с .equals()

1

изменить его на:

if (boozeAmount.equals("") || boozeAmount == null) 

Хотя это, наверное, безопаснее и do:

if (...) 
{ 
    // just set it to zero and skip even trying to parse 
} 
else 
{ 
    // do the actual parsing 
} 
1

Всякий раз, когда вы извлекаете строковое значение из EditText, всегда обрезайте эту переменную, чтобы избежать white spaces из EditText.

String boozeAmount = boozeConsumed.getText().toString().trim();     // apply Trim 

// Always compare strings with `equals()` method in Java & Android 
if (boozeAmount.equals("") || boozeAmount == null) 
{ 
    boozeConsumed.setText("0"); 
    boozeAmount = boozeConsumed.getText().toString(); 
} 
    int boozeOz = Integer.parseInt(boozeAmount) * 12; 
    double beerCalc = boozeOz * 4 * 0.075; 
1

Вы можете проверить, если это пустой, а затем заполнить его с 0 и затем получить вход.

Кроме того, всегда сравнивайте строковые значения с .equals и используйте .trim(), чтобы избавиться от пробелов, чтобы он также был признан недействительным.

if (boozeConsumed.getText().toString().trim().equals("")) { 
// if (boozeConsumed.length() == 0) { // doesn't consider spaces though 
    boozeConsumed.setText("0"); 
} 

String boozeAmount = boozeConsumed.getText().toString(); 
int boozeOz = Integer.parseInt(boozeAmount) * 12; 
double beerCalc = boozeOz * 4 * 0.075; 

Или просто сделать это, потому что вам не нужно, чтобы разобрать его на целое число, если вы знаете, что нет ничего там:

String boozeAmount = boozeConsumed.getText().toString(); 

int boozeOz = 0; 
double beerCalc = 0; 

if (boozeAmount.trim().equals("") || boozeAmount == null){ 
    boozeConsumed.setText("0"); 
    boozeAmount = boozeConsumed.getText().toString(); 
} else { 
    // only parse it if there's something there 
    boozeOz = Integer.parseInt(boozeAmount) * 12; 
    beerCalc = boozeOz * 4 * 0.075; 
} 
Смежные вопросы