Android GPS location always null inside AsyncTask -


i trying current location of user asynctask. application depends on latitude , longitude values. trying show progressdialog user till location fetched.

problem :- location value null. know getting gps location takes time. location value null after waiting sometimes. null.

below code :-

   public class mainactivity extends actionbaractivity {              @override             protected void oncreate(bundle savedinstancestate)             {                          super.oncreate(savedinstancestate);                              setcontentview(r.layout.activity_main);                       //some action …              }              @override                 public boolean onoptionsitemselected(menuitem item)                   {                       if (id == r.id.action_settings)                      {                         return true;                      }                       if(id == r.id.action_location)                      {                           locationtask locgetter = new locationtask(mainactivity.this);                           locgetter.execute();                      }                      return super.onoptionsitemselected(item);         } } 

below asynctask

        public class locationtask extends asynctask<void,void,void> implements locationlistener         {                 private progressdialog dialog;                 private activity callingactivity;                 locationmanager locationmanager;               string provider = locationmanager.gps_provider;                public locationtask(activity activity)                  {                         callingactivity = activity;                  }                  @override                 protected void onpreexecute()                  {                     dialog= progressdialog.show(callingactivity,"getting co-ordinates","please wait....");                }                      @override                 protected void doinbackground(void... voids)                 {                       locationmanager = (locationmanager) callingactivity.getsystemservice(context.location_service);                       location location = locationmanager.getlastknownlocation(provider);                       showlocation(location);                           return null;                }                  private void showlocation(location location)                 {                      if(location == null)                         {                             log.d("location","failed location");                         }                          else                         {                             log.d("location","latitude :- "+location.getlatitude()+" longitude :- "+location.getlongitude());                         }                 }                  @override                 protected void onpostexecute(void avoid)                 {                         dialog.dismiss();                         super.onpostexecute(avoid);                  }              @override             public void onlocationchanged(location location)                 {                     showlocation(location);                }                  @override             public void onstatuschanged(string s, int i, bundle bundle) {              }              @override             public void onproviderenabled(string s) {              }              @override             public void onproviderdisabled(string s) {              } } 

update :-

as mentioned ivan have modified asynctask location below :-

@override protected void doinbackground(void... voids) {         locationmanager = (locationmanager) callingactivity.getsystemservice(context.location_service);         locationmanager.requestlocationupdates(provider,0,0,this);         if(locationmanager != null) {             location location = locationmanager.getlastknownlocation(provider);             showlocation(location);         } return null; } 

but throws "windows leaked" exception in dialog= progressdialog.show(callingactivity,"getting co-ordinates","please wait...."); inside onprexecute() method.

seems me might missing requestlocationupdates(...) call.

please check related question better understanding on might missing, sure doesn't problem being inside asynctask, although don't see need asynctask in snippet.


Comments