2016-03-30 18 views
0

Ich versuche einen EditText, der vom Typ Nummer in Xml ist, in einen Integer zu konvertieren, um den Wert in Sekunden zu berechnen.EditText zu 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; 

Wenn ich die Zeilen kommentieren, wo inHr und Inmin initialisiert ich keinen Fehler in der Laufzeit bekommen, aber wenn ich den Code belassen, wie es oben ich folgende Fehlermeldung ist erhalten:

java.lang.RuntimeException : Die Aktivität konnte nicht gestartet werden ComponentInfo {dit.assignment3/dit.assignation3.Timer}: java.lang.NumberFormatException: Ungültige int: ""

Ich habe dies auch versucht, während derselbe Fehler bei der gleichen Codezeile beginnt :

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(); 
     } 
    }); 

Vielen Dank im Voraus :)

+2

wie Sie Text – TooManyEduardos

+1

Eingabe sind nicht verfälscht in dem Fehler gegeben hat selbst. Invalid int: "" Sie müssen den Text nicht eingegeben haben. Es ist leer. – Ankita

Antwort

1

Ich bin sicher, dass diese Codes Blöcke sind genau Genau wie du es hier gezeigt hast. Das heißt, Sie initialisieren direkt EditText und rufen sofort getText() Methode, die Exception verursacht.

Es wird keinen Wert sofort nach der Initialisierung geben, so dass Sie NumberFormatException erhalten, wenn Sie Integer.parseInt aufrufen, um den Wert zu leeren.

Also ich empfehle Ihnen, diese Codes in einem Ereignis wie buttonClicked wie hier zu setzen, so dass Sie sicher sein können, dass Sie einige Texte eingegeben haben. Und es ist besser zu überprüfen, ob empty auch,

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

Also in einer onClickListener Typ Methode? Ich benutze es für einen Timer. Vielen Dank – Caoimhe

+0

@Caoimhe Dann hat es funktioniert, oder immer noch ein Problem übrig? –

+0

Ich habe es geschafft zu arbeiten, indem Sie dies verwenden: start.setOnClickListener (neue Ansicht.OnClickListener() { public void onClick (View v) { if (! StundenIn.Text(). ToString(). IsEmpty()) { inHr = Integer.parseInt (StundenIn.Text(). ToString()) ; StundenMs = hrsToMs (inHr); } .... Danke für die Hilfe! Sehr zu schätzen wissen Sie – Caoimhe

0

Sie ein java.lang.NumberFormatException: Invalid int: "" bekommen, wenn Sie versuchen, eine leere Zeichenfolge zu Integer zu analysieren. Daher müssen Sie prüfen, ob der EditText leer ist oder nicht.

Man könnte leicht tun, wie unten

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

ODER

Sie einfach einen Scheck wie unten

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

Oder noch besser, verwenden Sie TextUtils.isEmpty(). – ElDuderino

+0

Ja sicher ... es gibt eine Reihe von anderen Optionen auch dafür .. Wie auch immer, danke ... :) @ElDuderino – Lal

0

Zuerst müssen Sie die Linien setzen, wo Sie von EditText innen ein Ereignis wie auf Knopfdruck lesen. Überprüfen Sie dann, ob etwas in den Editiertext eingegeben wurde oder nicht, und verwenden Sie dann die try/catch-Klausel, um es in Zahl zu konvertieren.

Versuchen Sie diesen Code.
eine Schaltfläche, um Ihre Aktivität XML-Datei hinzufügen:

<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; 
     } 
     }   
    }