App is not calculating distance and speed android -


app runs without errors, want calculate distance, when clicked button start it's start position , when clicked reset - finish position, , it'll calculate distance between start , finish position, cant calculate distance , speed. how correct that? here code:

public class tab1 extends fragment implements locationlistener, view.onclicklistener{  googlemap googlemap; supportmapfragment mapfragment; private button buttonstart; private button buttonstop; private button buttonreset; private chronometer chronometerrun; private double latstart; private double lonstart; private double latstop; private double lonstop; private latlng latlngstart; private latlng latlngstop; private textview textviewdistance; location location; long time = 0;  @nullable public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) {    view view = inflater.inflate(r.layout.tab_1, container, false);      textviewdistance = (textview)view.findviewbyid(r.id.textviewdistance);     buttonstart = (button) view.findviewbyid(r.id.buttonstart);     buttonstop = (button) view.findviewbyid(r.id.buttonstop);     buttonreset = (button) view.findviewbyid(r.id.buttonreset);     chronometerrun = (chronometer) view.findviewbyid(r.id.chronometerrunning);      buttonstart.setonclicklistener(this);     buttonstop.setonclicklistener(this);     buttonreset.setonclicklistener(this);      initmap();     return view; }  public void initmap(){      if (googlemap == null) {         mapfragment = (supportmapfragment) getchildfragmentmanager().findfragmentbyid(r.id.map);      }      googlemap = mapfragment.getmap();     googlemap.setmylocationenabled(true);     // getting locationmanager object system service location_service     locationmanager locationmanager = (locationmanager) getactivity().getsystemservice(context.location_service);     // creating criteria object retrieve provider     criteria criteria = new criteria();     // getting name of best provider     string provider = locationmanager.getbestprovider(criteria, true);     // getting current location     location = locationmanager.getlastknownlocation(provider);     if(location!=null){         onlocationchanged(location);     }     locationmanager.requestlocationupdates(provider, 20000, 0, this);     googlemap.getuisettings().setmylocationbuttonenabled(true);  }  public double calculationbydistance(latlng startp, latlng endp) {     int radius = 6371;// radius of earth in km     double lat1 = startp.latitude;     double lat2 = endp.latitude;     double lon1 = startp.longitude;     double lon2 = endp.longitude;     double dlat = math.toradians(lat2 - lat1);     double dlon = math.toradians(lon2 - lon1);     double = math.sin(dlat / 2) * math.sin(dlat / 2)             + math.cos(math.toradians(lat1))             * math.cos(math.toradians(lat2)) * math.sin(dlon / 2)             * math.sin(dlon / 2);     double c = 2 * math.asin(math.sqrt(a));     double valueresult = radius * c;     double km = valueresult / 1;     decimalformat newformat = new decimalformat("####");     int kmindec = integer.valueof(newformat.format(km));     double meter = valueresult % 1000;     int meterindec = integer.valueof(newformat.format(meter));     log.i("radius value", "" + valueresult + "   km  " + kmindec             + " meter   " + meterindec);     return radius * c; //km  }    @override public void onclick(view v) {     switch(v.getid())     {         case r.id.buttonstart:             chronometerrun.setbase(systemclock.elapsedrealtime() - time);             chronometerrun.start();             latstart = location.getlatitude();             // getting longitude             lonstart = location.getlongitude();             toast.maketext(tab1.super.getactivity() , "latstart: "+latstart+"; lonstart: "+lonstart,toast.length_long).show();             // creating latlng object             latlngstart = new latlng(latstart, lonstart);             log.i("latstart: "+latstart , "lonstart: "+lonstart);             break;         case  r.id.buttonstop:             time = systemclock.elapsedrealtime() - chronometerrun.getbase();             chronometerrun.stop();              break;         case r.id.buttonreset:             time = systemclock.elapsedrealtime() - chronometerrun.getbase();             toast.maketext(tab1.super.getactivity() , "time: "+time,toast.length_short).show();              latstop = location.getlatitude();             // getting longitude of current location             lonstop = location.getlongitude();             toast.maketext(tab1.super.getactivity() , "latstop:  "+latstop+"; lonstop: "+lonstop,toast.length_long).show();             // creating latlng object current location             latlngstop = new latlng(latstop, lonstop);             log.i("latstop: "+latstop , "lonstop: "+lonstop);             double distance = calculationbydistance(latlngstart,latlngstop);             string sdistance = double.tostring(distance);             textviewdistance.settext(sdistance);             if (time > 0 ) {                 double speed = distance / time*1000; // time in ms                 toast.maketext(tab1.super.getactivity() ,  "distance: "+ distance +"; speed: "+speed,toast.length_long).show(); }             time = 0;             chronometerrun.setbase(systemclock.elapsedrealtime());             chronometerrun.stop();             break;     } }  @override public void onlocationchanged(location location) {     // getting latitude of current location     double latitude = location.getlatitude();     // getting longitude of current location     double longitude = location.getlongitude();     // creating latlng object current location     latlng latlng = new latlng(latitude, longitude);     // showing current location in google map     googlemap.movecamera(cameraupdatefactory.newlatlng(latlng));     // zoom in google map     googlemap.animatecamera(cameraupdatefactory.zoomto(14)); }  @override public void onstatuschanged(string provider, int status, bundle extras) {  }  @override public void onproviderenabled(string provider) {  }  @override public void onproviderdisabled(string provider) {  } } 

you dont have call onlocationchanged method that, automatically called everytime there change in location. either have call getlastknownlocation again in reset button code , take location last 1 (like in init map) or have global variable update in onlocationchanged method. so(pseudo-pseudo code):

onlocationchanged(location location) {    globalvarlocation.latitude = location.latitude;    globalvarlocation.longitude = location.longitude; } 

Comments