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
Post a Comment