Не удалось разобрать исключение java.lang.NumberFormat - PullRequest
0 голосов
/ 31 июля 2010
try{    
    if (flag_conv == false)
    {
      if ((Integer.parseInt(et1.getText().toString()))<=55)
      {
       final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
       alertDialog.setTitle("Reset...");
       alertDialog.setMessage("WB should be grater than 55");

       alertDialog.setButton2("OK", new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int which) 
          {
                // here you can add functions
                dialog.dismiss();
          }});
       alertDialog.setIcon(R.drawable.icon);
       alertDialog.show();
       tv1.setText("WB");
       et1.setText("");
       wbflg = true;
       wbval = 0;
       return;          
     }
     else
     {                     
      wbval = Integer.parseInt(et1.getText().toString());
     }
   }
 catch(NumberFormatException nfe)
{System.out.println("Could not parse " + nfe);}

И я получил следующее исключение

07-31 14:48:45.409: INFO/System.out(431): Could not parse java.lang.NumberFormatException: unable to parse '' as integer
07-31 14:48:50.569: INFO/System.out(431): Could not parse java.lang.NumberFormatException: unable to parse '' as integer
07-31 14:48:54.599: INFO/System.out(431): Could not parse java.lang.NumberFormatException: unable to parse '' as integer
07-31 14:48:54.829: INFO/System.out(431): Could not parse java.lang.NumberFormatException: unable to parse '' as integer
07-31 14:48:54.958: INFO/System.out(431): Could not parse java.lang.NumberFormatException: unable to parse '' as integer
07-31 14:48:55.108: INFO/System.out(431): Could not parse java.lang.NumberFormatException: unable to parse '' as integer
07-31 14:48:55.259: INFO/System.out(431): Could not parse java.lang.NumberFormatException: unable to parse '' as integer
07-31 14:48:55.409: DEBUG/dalvikvm(118): GREF has increased to 201
07-31 14:48:55.429: INFO/System.out(431): Could not parse java.lang.NumberFormatException: unable to parse '' as integer
07-31 14:52:43.798: DEBUG/SntpClient(58): request time failed: java.net.SocketException: Address family not supported by protocol

Ответы [ 2 ]

8 голосов
/ 31 июля 2010

Вкл. 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();
}
0 голосов
/ 31 июля 2010

Я не уверен насчет Java, но если у вас есть строки, которые могут быть недопустимыми у вас может быть такая функция, как в C #:

bool res = Int.TryParse(s,ref int);
...