2013-08-04 1 views
1

У меня есть 2 редактирования текстовых полей ETPredictKm (длинное значение) и ETPredictFuelQty (двойное значение). Если я вставляю одно значение, другое получает автогенерирование, когда я нажимаю соответствующий EditText. Я использую onFocusListener. Моя проблема заключается в том, что когда я вставляю значение km для вычисления FuelQty, он вычисляется должным образом. Но когда я ввожу количество топлива и нажимаю на ETPredictKm, я получаю недопустимый длинный: «Исключение.Недопустимый длинный: "" Исключение

Пожалуйста, помогите мне с вашими предложениями. Спасибо.

Вот некоторые код:

try 
    { 
     predictKm = Long.parseLong(ETPredictKm.getText().toString()); //Get the error here 
     predictFuelQty = Double.parseDouble(ETPredictFuelQty.getText().toString()); 
    } 
    catch(NumberFormatException ne) 
    { 
     ne.printStackTrace(); 
    } 
    if(isChkLastMileage1 ==true || isChkLastMileage5==true||isChkLastMileage10==true) 
    { 

     if(ETPredictKm.hasFocus()) 
     { 
      if(predictFuelQty!=0) 
      { 
        //predictionMileage is double too 
       predictKm =(long) (predictionMileage*predictFuelQty); 
       ETPredictKm.setText(String.valueOf(predictKm)); 

      } 
     } 
     else if(ETPredictFuelQty.hasFocus()) 
     { 
      // This value is calculated properly    
      if(predictKm!=0) 
      { 
      predictFuelQty =predictKm/predictionMileage; 
     ETPredictFuelQty.setText(new DecimalFormat("##.##").format(predictFuelQty)+" Litres"); 
      } 

     } 
    } 

ответ

0

Итак, я получил эту работу, просто поставив оба синтаксических выражения в разные блоки try-catch. Вроде так: -

try 
     { 
      predictKm = Long.parseLong(ETPredictKm.getText().toString().trim()); 

     } 
     catch(NumberFormatException ne) 
     { 
      ne.printStackTrace(); 
     } 
     try 
     { 
      predictFuelQty = Double.parseDouble(ETPredictFuelQty.getText().toString().trim()); 
     } 
     catch(NumberFormatException ne) 
     { 
      ne.printStackTrace(); 
     } 
1

Вы можете обрезать пробелы, прежде чем конвертировать в длинный/двойной, как этот

try 
    { 
     predictKm = Long.parseLong(ETPredictKm.getText().toString().trim()); //Get the error here 
     predictFuelQty = Double.parseDouble(ETPredictFuelQty.getText().toString().trim()); 
    } 
    catch(NumberFormatException ne) 
    { 
     ne.printStackTrace(); 
    } 

И положить в нуль/пустые чеки для ETPredictFuelQty.getText() и ETPredictKm.getText() перед преобразованием типа передачи данных, если только одно из ваших полей будет установлено в любой точке, другое будет пустым/пустым и, следовательно, выбросит исключение

+0

Я получил эту работу, поставив синтаксические выражения в отдельные блоки try-catch. Не уверен, что это правильная практика, но работал на меня. Спасибо за объяснение и ваше время, хотя, я уверен, что это только расширит мои знания. –

Смежные вопросы