java - Android TimePickerDialog. app crashes when setting time more than current time -


my app getting crash when try set time more current time. please solve problem. current time working fine app crashing when select time more current time. thanks

javafile:

package com.example.akshay.eventmanager;  import android.app.activity; import android.app.datepickerdialog; import android.app.timepickerdialog; import android.content.intent; import android.hardware.input.inputmanager; import android.os.bundle; import android.text.inputtype; import android.util.log; import android.view.view; import android.widget.button; import android.widget.datepicker; import android.widget.edittext; import android.widget.textview; import android.widget.timepicker; import android.app.timepickerdialog.ontimesetlistener; import android.widget.toast;  import com.google.android.gms.common.googleplayservicesnotavailableexception; import com.google.android.gms.common.googleplayservicesrepairableexception; import com.google.android.gms.location.places.place; import com.google.android.gms.location.places.ui.placepicker; import com.google.android.gms.maps.model.latlng;  import java.text.simpledateformat; import java.util.calendar; import java.util.locale; import java.util.timezone;  import android.app.datepickerdialog.ondatesetlistener;   /**  * created akshay on 7/12/2015.  */ public class create extends activity implements view.onclicklistener {      button select, create;     edittext title, desc, time;     textview venueinfo;     placepicker.intentbuilder intentbuilder;     private static final int place_picker_request = 1;     public latlng gotlatlng;     string placename;     string plname;     string addr;     double gotlat, gotlong;     string lat, long;     databasehelper mydb;     public static final string log_tag = "create";      string gottime = " ";     string gotdate = " ";      datepickerdialog datepicker;     timepickerdialog mytimepicker;     simpledateformat dateformatter;     simpledateformat timeformatter;     static boolean flag = false;       @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.create);         dateformatter = new simpledateformat("eeee dd" ,locale.us);            showdate();         showtime();         casting();     }      public void casting() {         select = (button) findviewbyid(r.id.bselect);         create = (button) findviewbyid(r.id.bcreate);         title = (edittext) findviewbyid(r.id.ettitle);         desc = (edittext) findviewbyid(r.id.etdescription);         time = (edittext) findviewbyid(r.id.ettime);         venueinfo = (textview) findviewbyid(r.id.tvvenue);         time.setinputtype(inputtype.type_null);          select.setonclicklistener(this);         create.setonclicklistener(this);         time.setonclicklistener(this);      }      @override     public void onclick(view v) {          switch (v.getid())          {             case r.id.bselect:                 try {                     intentbuilder = new placepicker.intentbuilder();                      intent intent = intentbuilder.build(create.this);                       startactivityforresult(intent, place_picker_request);                  } catch (googleplayservicesrepairableexception e) {                     e.printstacktrace();                  } catch (googleplayservicesnotavailableexception e) {                     toast.maketext(create.this, "google play services not available.",                             toast.length_long)                             .show();                  }                 break;               case r.id.bcreate:                 string title = title.gettext().tostring();                 string desc = desc.gettext().tostring();                 string eventtime = time.gettext().tostring();                 string place = venueinfo.gettext().tostring();                 mydb = new databasehelper(this);                 log.e(log_tag, title);                 log.e(log_tag, desc);                 log.e(log_tag, place);                 log.e(log_tag, lat);                 log.e(log_tag, long);                 log.e(log_tag, addr);                 log.e(log_tag, eventtime);                 int flag = mydb.insertvalues(title, desc, place, lat, long, addr, eventtime);                  if (flag == 1) {                     toast.maketext(create.this, "sucess", toast.length_long).show();                  } else {                     toast.maketext(create.this, "error adding records", toast.length_long).show();                 }                 break;              case r.id.ettime:                 mytimepicker.show();                 datepicker.show();                 break;          }     }      protected void onactivityresult(int requestcode, int resultcode, intent data) {         if (requestcode == place_picker_request) {             if (resultcode == result_ok) {                 place place = placepicker.getplace(data, this);                 gotlatlng = place.getlatlng();                 plname = (string) place.getname();                 addr = (string) place.getaddress();                 gotlat = gotlatlng.latitude;                 gotlong = gotlatlng.longitude;                 lat = string.valueof(gotlat);                 long = string.valueof(gotlong);                 placename = string.format("place: %s", place.getname());                 toast.maketext(this, placename, toast.length_long).show();                 venueinfo.settext(plname);              }         }     }      public void showdate() {         calendar cal = calendar.getinstance();         datepicker = new datepickerdialog(this, new ondatesetlistener() {              public void ondateset(datepicker view, int year, int monthofyear, int dayofmonth ) {                    calendar newdate = calendar.getinstance();                 newdate.set(year, monthofyear, dayofmonth);                 gotdate = dateformatter.format(newdate.gettime()).tostring();               }         }, cal.get(calendar.year), cal.get(calendar.month), cal.get(calendar.day_of_week)); flag =true;     }  public void showtime() {     if(flag == true) {          calendar calender = calendar.getinstance();         mytimepicker = new timepickerdialog(this, new ontimesetlistener() {              public void ontimeset(timepicker view, int hourofday, int minute) {                   calendar newtime = calendar.getinstance();                  newtime.set(hourofday, minute);                 gottime = gotdate + " @ " + string.valueof(hourofday) + " :" + string.valueof(minute + 1);                 time.settext(gottime);             }         }, calender.get((calendar.hour_of_day)), calender.get(calendar.minute), true);     }      } } 

logcat:

07-13 16:43:10.468      478-478/com.example.akshay.eventmanager e/zygote﹕ mountemulatedstorage() 07-13 16:43:10.468      478-478/com.example.akshay.eventmanager e/zygote﹕ v2 07-13 16:43:10.468      478-478/com.example.akshay.eventmanager e/selinux﹕ [debug] get_category: variable seinfo: default sensitivity: null, cateogry: null 07-13 16:43:29.338      478-478/com.example.akshay.eventmanager e/viewrootimpl﹕ senduseractionevent() mview == null 07-13 16:43:31.088      478-478/com.example.akshay.eventmanager e/androidruntime﹕ fatal exception: main     process: com.example.akshay.eventmanager, pid: 478     java.lang.arrayindexoutofboundsexception: length=17; index=17             @ java.util.calendar.set(calendar.java:1122)             @ com.example.akshay.eventmanager.create$2.ontimeset(create.java:196)             @ android.app.timepickerdialog.onclick(timepickerdialog.java:204)             @ com.android.internal.app.alertcontroller$buttonhandler.handlemessage(alertcontroller.java:162)             @ android.os.handler.dispatchmessage(handler.java:102)             @ android.os.looper.loop(looper.java:145)             @ android.app.activitythread.main(activitythread.java:5972)             @ java.lang.reflect.method.invoke(native method)             @ java.lang.reflect.method.invoke(method.java:372)             @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1399)             @ com.android.internal.os.zygoteinit.main(zygoteinit.java:1194) 

set time in calendar in showtime() method follows:

public void showtime() {     if(flag == true) {          calendar calender = calendar.getinstance();         mytimepicker = new timepickerdialog(this, new ontimesetlistener() {              public void ontimeset(timepicker view, int hourofday, int minute) {                   calendar newtime = calendar.getinstance();                  //newtime.set(hourofday, minute); // remove line                  //add these 2 line                 newtime.set(calendar.hour_of_day, hourofday);                 newtime.set(calendar.minute, minute);                  gottime = gotdate + " @ " + string.valueof(hourofday) + " :" + string.valueof(minute + 1);                 time.settext(gottime);             }         }, calender.get((calendar.hour_of_day)), calender.get(calendar.minute), true);     }      } 

edit: hourodday in am/pm can this:

string format = "hh:mm a"; // own format  simpledateformat sdf = new simpledateformat(format, locale.us);  string formated_time = sdf.format(newtime.gettime());    //formated_time show time "hh:mm am/pm". 

Comments