2016-03-30 5 views
0

Я пытаюсь преобразовать EditText, который имеет номер типа в xml, в Integer, чтобы вычислить значение в секундах.EditText to Integer (Android)

hoursIn = (EditText) findViewById(R.id.hoursET); 
    minIn = (EditText) findViewById(R.id.minET); 
    start = (Button) findViewById(R.id.startButton); 
    stop = (Button) findViewById(R.id.stopButton); 
    textViewTime = (TextView) findViewById(R.id.timeDisp); 

    inHr = Integer.parseInt(hoursIn.getText().toString()); 
    inMin = Integer.parseInt(minIn.getText().toString()); 

    hoursMs = hrsToMs(inHr); 
    minMs = minToMs(inMin); 
    totalTime = hoursMs + minMs; 

Когда я комментируйте строки, где inHr и inMin инициализируются я не получаю сообщение об ошибке во время выполнения, однако, когда я уезжаю код, как это выше я получаю следующее сообщение об ошибке:

java.lang.RuntimeException : Не удалось запустить Activity ComponentInfo {dit.assignment3/dit.assignment3.Timer}: java.lang.NumberFormatException: Invalid int: ""

Я также попытался это сделать, получив ту же ошибку, начиная с той же строки кода :

final CounterClass timer = new CounterClass(totalTime, 1000); 
    start.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (hoursIn != null) 
      { 
       inHr = Integer.parseInt(hoursIn.getText().toString()); 
       hoursMs = hrsToMs(inHr); 

      } 
      if (minIn != null) 
      { 
       inMin = Integer.parseInt(minIn.getText().toString()); 
       minMs = minToMs(inMin); 
      } 
      else 
      { 
       textViewTime.setText("PLEASE GIVE A TIME"); 
      } 
      totalTime = hoursMs + minMs; 
      timer.start(); 
     } 
    }); 

Заранее спасибо :)

+2

выглядит, как вы не вводить текст – TooManyEduardos

+1

Это заданный в самых ошибках. Недопустимый int: "" Вы, должно быть, не ввели текст. Это пусто. – Ankita

ответ

1

Я уверен, что эти коды блоков точно как вы показали здесь. Это означает, что вы непосредственно инициализируете EditText и немедленно вызываете метод getText(), который вызывает Exception.

При инициализации не будет никакого значения, так что вы получаете NumberFormatException при вызове Integer.parseInt на пустое значение.

Поэтому я предлагаю вам поместить эти коды в какое-то событие, например buttonClicked, чтобы вы могли быть уверены, что ввели некоторые тексты. И это лучше, если проверка empty, а также,

public void buttonClicked(View v){ 
    inHr = Integer.parseInt(hoursIn.getText().toString()); 
    inMin = Integer.parseInt(minIn.getText().toString()); 
} 
+0

Итак, в методе типа onClickListener? Я использую его для таймера. Спасибо – Caoimhe

+0

@Caoimhe Тогда это сработало, или еще проблема осталась? –

+0

Мне удалось заставить его работать, используя это: start.setOnClickListener (новый вид.OnClickListener() { public void onClick (View v) { if (! HoursIn.getText(). ToString(). IsEmpty()) { inHr = Integer.parseInt (hoursIn.getText(). ToString()) ; hoursMs = hrsToMs (inHr); } .... Спасибо за помощь! Очень ценю это – Caoimhe

0

вы получите java.lang.NumberFormatException: Invalid int: "" всякий раз, когда вы пытаетесь разобрать пустую строку в целое число. Таким образом, вам нужно проверить, пуст ли EditText или нет.

Вы можете легко сделать это, как показано ниже

if (hoursIn.getText().toString().matches("")) { 
    Toast.makeText(this, "You did not enter a text", Toast.LENGTH_SHORT).show(); 
    return; 
} 

ИЛИ

вы можете просто сделать чек, как показано ниже

if (hoursIn.getText().toString().equals("")) { 
    Toast.makeText(this, "You did not enter a text", Toast.LENGTH_SHORT).show(); 
    return; 
} 
+1

Или еще лучше, используйте TextUtils.isEmpty(). – ElDuderino

+0

Да, конечно ... есть много других вариантов тоже для этого. В любом случае спасибо ... :) @ElDuderino – Lal

0

Сначала вы должны поместить строки, где вы считывал EditText внутри какого-то события, как нажатие кнопки. Затем проверьте, что что-либо введено в edittext или нет, затем используйте предложение try/catch, чтобы преобразовать его в число.

Попробуйте этот код.
Добавить кнопку на активности XML-файл:

<Button 
    android:height="wrap_content" 
    android:width="wrap_content" 
    android:onClick="myClickHandler" /> 



    hoursIn = (EditText) findViewById(R.id.hoursET); 
    minIn = (EditText) findViewById(R.id.minET); 
    start = (Button) findViewById(R.id.startButton); 
    stop = (Button) findViewById(R.id.stopButton); 
    textViewTime = (TextView) findViewById(R.id.timeDisp); 

    public void myClickHandler(View v){ 
    if (hoursIn.getText().toString().matches("") || minIn.getText().toString().matches("")){ 
     Toast.makeText(this, "You did not enter a text",Toast.LENGTH_SHORT).show(); 
     return; 
    } else { 
      try { 
      inHr = Integer.parseInt(hoursIn.getText().toString()); 
      inMin = Integer.parseInt(minIn.getText().toString()); 
      hoursMs = hrsToMs(inHr); 
      minMs = minToMs(inMin); 
      totalTime = hoursMs + minMs; 
      Log.i("success"); 
      } catch (NumberFormatException e) { 
      Toast.makeText(this, "Please enter number only",Toast.LENGTH_SHORT).show(); 
      return; 
     } 
     }   
    } 

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

  • Нет связанных вопросов^_^