2017-04-12 43 views
-17

當我使用TimePicker選擇時間時,我的應用程序崩潰。
如何解決這個問題?java.lang.NumberFormatException:無效int:「24 pm」

請指導我。

當我打印的timeMinuteSystem.out: 30 am我在這一行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

以及你只能更換'am'但你必須輸入與'pm' –

+0

如何替換他們兩個? @Japu_D_Cret –

+1

作爲您的標題顯示24下午不是一個有效的int.Try從此刪除pm。 – DkThakur

回答

3

你可以做以下得到 錯誤:

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

更換兩節「時」和「分」與「」。

+3

或使用正則表達式:'timeMinute.replaceAll(「\ s [a | p] m」,「」)' –

+2

@Rotwang真的,即使不是每個程序員都熟悉正則表達式,所以'.replace()'可能比較容易理解。仍然你的解決方案更短。 – Rafalon

+0

那麼,'replace()'解決方案也是「我的」,如果你在評論中看到,那是我建議的第一件事......;) –

4

較短的解決方案,只是提供一個替代使用雙replace(),是使用正則表達式:

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

不錯。有一個upvote! – Bathsheba

+1

@Bathsheba謝謝,親愛的! –

相關問題