2017-04-12 2 views
-17

Mon application s'est bloquée lorsque j'ai choisi l'heure à l'aide d'un TimePicker.
Comment résoudre ce problème?java.lang.NumberFormatException: Invalid int: "24 h"

Veuillez me guider.

lorsque j'imprime le timeMinuteSystem.out: 30 am je reçois une erreur sur cette ligne Integer.parseInt(timeMinute.replace(" am","")), true);

start_time.setInputType(InputType.TYPE_NULL); 

     start_time.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       String time = start_time.getText().toString(); 

       if (time != null && !time.equals("")) { 
        StringTokenizer st = new StringTokenizer(time, ":"); 
        String timeHour = st.nextToken(); 
        String timeMinute = st.nextToken(); 

        timePickDialog = new TimePickerDialog(v.getContext(), 
          new TimePickHandler(), Integer.parseInt(timeHour), 
          Integer.parseInt(timeMinute.replace(" am","")), true); 

       } else { 
        timePickDialog = new TimePickerDialog(v.getContext(), 
          new TimePickHandler(), 10, 45, true); 
       } 
       timePickDialog.show(); 
      } 
     }); 



private class TimePickHandler implements TimePickerDialog.OnTimeSetListener { 

     @Override 
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
      //start_time.setText(hourOfDay + ":" + minute); 
      int hour = hourOfDay % 12; 
      if (hour == 0) 
       hour = 12; 
      start_time.setText(String.format("%02d:%02d %s", hour, minute,hourOfDay < 12 ? "am" : "pm")); 
      timePickDialog.hide(); 
     } 

    } 
+0

bien vous remplacez seulement 'am' mais vous avez une entrée avec' pm' –

+0

comment les remplacer tous les deux? @Japu_D_Cret –

+1

comme le montre votre titre 24 heures n'est pas un int valide.Essayez d'enlever pm de cela. – DkThakur

Répondre

3

Vous pouvez effectuer les opérations suivantes:

if (time != null && !time.equals("")) { 
    StringTokenizer st = new StringTokenizer(time, ":"); 
    String timeHour = st.nextToken(); 
    String timeMinute = st.nextToken(); 

    timePickDialog = new TimePickerDialog(v.getContext(), 
     new TimePickHandler(), Integer.parseInt(timeHour), 
     Integer.parseInt(timeMinute.replace(" am","").replace(" pm","")), true); 
} 

à remplacer les deux « h » et « h » avec "".

+3

Ou en utilisant une expression régulière: 'timeMinute.replaceAll (" \ s [a | p] m "," ")' –

+2

@Rotwang Vrai, même si tous les programmeurs ne sont pas familiers avec regex, donc '.replace()' pourrait être plus facile à comprendre. Votre solution est toujours plus courte. – Rafalon

+0

Eh bien, aussi la solution 'replace()' est "mine", si vous voyez dans les commentaires, celle-ci était la première chose que j'ai suggérée ...;) –

4

Une solution plus courte, juste pour fournir une alternative à l'utilisation d'un double replace(), serait d'utiliser une expression régulière:

timePickDialog = new TimePickerDialog(v.getContext(), 
    new TimePickHandler(), Integer.parseInt(timeHour), 
    Integer.parseInt(timeMinute.replace("\s[a|p]m", ""), true); 
+1

Nice. Avoir un upvote! – Bathsheba

+1

@Bathsheba Merci, mon cher! –