my goal name of city user in using coordinates locationlistener , matching google's maps api, in background asynctask.
when call cityfinder mainactivity (oncreate), nothing happening. not see logs onpreexecute.
what need fix this?
cityfinder asynctask
import android.app.activity; import android.app.progressdialog; import android.content.dialoginterface; import android.content.intent; import android.location.location; import android.location.locationlistener; import android.location.locationmanager; import android.os.asynctask; import android.os.build; import android.os.bundle; import android.provider.settings; import android.util.log; import android.widget.toast; import com.android.volley.requestqueue; import com.android.volley.response; import com.android.volley.volleyerror; import com.android.volley.toolbox.jsonobjectrequest; import org.json.jsonexception; import org.json.jsonobject; import static android.support.v4.app.activitycompat.requestpermissions; import static com.android.volley.toolbox.volley.*; public class cityfinder extends asynctask<void, void, void> { private activity activity; private progressdialog progressdialog; private string googlemapsgeourl = "http://maps.googleapis.com/maps/api/geocode/json?latlng="; private locationmanager locationmanager; private locationlistener locationlistener; protected string cityname; public cityfinder(activity activity, locationmanager locationmanager, locationlistener locationlistener) { this.activity = activity; this.locationmanager = locationmanager; this.locationlistener = locationlistener; this.progressdialog = new progressdialog(this.activity); } protected void onpreexecute() { log.v("cityfinder", "onpreexecute"); progressdialog.setmessage("getting city's name..."); progressdialog.show(); progressdialog.setoncancellistener(new dialoginterface.oncancellistener() { public void oncancel(dialoginterface arg0) { cityfinder.this.cancel(true); } }); } @override protected void doinbackground(void... params) { try { this.locationmanager = (locationmanager) this.activity.getsystemservice(this.activity.location_service); this.locationlistener = new locationlistener() { @override public void onlocationchanged(location location) { googlemapsgeourl += location.getlatitude() + "," + location.getlongitude(); log.v("cityfinder", googlemapsgeourl); final requestqueue requestqueue = newrequestqueue(activity); jsonobjectrequest request = new jsonobjectrequest(googlemapsgeourl, null, new response.listener<jsonobject>() { @override public void onresponse(jsonobject response) { try { cityname = response.getjsonarray("results").getjsonobject(0).getstring("formatted_address"); } catch (jsonexception jex) { } } }, new response.errorlistener() { @override public void onerrorresponse(volleyerror error) { } }); requestqueue.add(request); } @override public void onstatuschanged(string s, int i, bundle bundle) { } @override public void onproviderenabled(string s) { } @override public void onproviderdisabled(string s) { activity.startactivity(new intent(settings.action_location_source_settings)); } }; locationmanager.requestlocationupdates("gps", 1000, 0, locationlistener); } catch (securityexception se) { if (build.version.sdk_int >= build.version_codes.m) { requestpermissions(this.activity, new string[]{ android.manifest.permission.access_fine_location, android.manifest.permission.access_coarse_location, android.manifest.permission.internet}, 9000); return null; } else { } toast.maketext(activity, se.getlocalizedmessage(), toast.length_long).show(); } return null; } protected void onpostexecute(void v) { this.progressdialog.setmessage("your city name has been found: " + this.cityname); } }
you're missing execute
call after creating asynctask
. see doc example: https://developer.android.com/reference/android/os/asynctask.html
since doinbackground
call doesn't use params
, can run with:
new cityfinder(this, this.locationmanager, this.locationlistener).execute();
Comments
Post a Comment