Вкл. Integer.parseInt
Сообщение об исключении выглядит следующим образом:
07-31 14:48:45.409: INFO/System.out(431): Could not parse
java.lang.NumberFormatException: unable to parse '' as integer
Действительно, пустая строка не может быть проанализирована с помощью Integer.parseInt(String)
,Таким образом:
int num = Integer.parseInt("");
// throws java.lang.NumberFormatException: For input string: ""
Если у вас есть произвольный String s
, который может быть isEmpty()
или даже null
, то у вас должен быть специальный код для его обработки, потому что Integer.parseInt(s)
всегда будет выдавать исключение в таких случаях.
Конечно, Integer.parseInt(s)
может выдать NumberFormatException
, когда s
, например, "xyz"
, поэтому вы можете захотеть поместить операторвнутри блока try-catch
.
Таким образом, вы можете написать что-то вроде этого:
String s = ...;
if (s == null || s.isEmpty()) {
complaintAboutNotGettingAnything();
} else {
try {
int num = Integer.parseInt(s);
doSomethingWith(num);
catch (NumberFormatException e) {
complaintAboutGettingSomethingYouDontWant();
}
}
При написании кода, который легко отлаживать
В этом конкретном случаефрагмент, похоже, что parseInt
вызывается следующим образом:
if ((Integer.parseInt(et1.getText().toString()))<=55) ...
Многое может пойти не так в этом одном выражении.Я предлагаю рефакторинг, который разбивает это на логические наблюдаемые шаги следующим образом:
String et1text = et1.getText().toString();
// maybe check if it's empty/null if necessary
// maybe log/inspect what the value of et1text is for debugging
try {
int et1val = Integer.parseInt(et1text);
if (et1val <= THRESHOLD) {
// ...
}
} catch (NumberFormatException e) {
moreComplaining();
}