java - adding AsyncTask to onClick listener -
this question has answer here:
i have made program works asynctask prints list of json data when program executed, problem want execute when press button. how results of asynctask onclick button listener ? how call asynctask onclick?
public class mainactivity extends actionbaractivity implements locationlistener { double[] avstand; jsonarray jarray; locationmanager lm; textview lt, ln; string provider; location l; listview list; stasjonadapter adapter; arraylist<stasjoner> stasjonliste; button nbutton; textview test; gpstracker gps; stasjoner stasjon; double minvalue; string geouri; button instbutton; button bildebutton; button kjortil; button visliste; file mphotofile; uri mphotofileuri; string mdisplayfolder; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); setcontentview(r.layout.activity_main); ln=(textview)findviewbyid(r.id.vislong); test=(textview)findviewbyid(r.id.test); lt=(textview)findviewbyid(r.id.vislati); gps = new gpstracker(mainactivity.this); // check if gps enabled if(gps.cangetlocation()){ double latitude = gps.getlatitude(); double longitude = gps.getlongitude(); // \n new line // toast.maketext(getapplicationcontext(), "your location - \nlat: " + latitude + "\nlong: " + longitude, toast.length_long).show(); }else{ // can't location // gps or network not enabled // ask user enable gps/network in settings gps.showsettingsalert(); } //get latitude , longitude of location double lat= gps.getlatitude(); double lng= gps.getlongitude(); //display on text view ln.settext(""+lng); lt.settext(""+lat); list = (listview)findviewbyid(r.id.list); stasjonliste = new arraylist<stasjoner>(); nbutton = (button)findviewbyid(r.id.button1); instbutton = (button)findviewbyid(r.id.instillinger); bildebutton = (button)findviewbyid(r.id.bildebutton); kjortil= (button)findviewbyid(r.id.button); visliste = (button)findviewbyid(r.id.visliste); //new stasjonasynctask().execute("http://hotell.difi.no/?dataset=porsgrunn/elbilparkering?"); blogas url, jis grazina html puslapi, reikia daryt requesta api endpoint, kuris grazina json new stasjonasynctask().execute("http://hotell.difi.no/api/json/porsgrunn/elbilparkering?"); instbutton.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { intent intent = new intent(mainactivity.this, instillinger.class); startactivity(intent); } }); nbutton.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { int value = (int) getminvalue(avstand); test.settext(stasjonliste.get(value).getlatitude().tostring()); test.settext(stasjonliste.get(value).getlongtitude().tostring()); string geouri = "geo:" + stasjonliste.get(value).getlatitude().tostring() + ","+ stasjonliste.get(value).getlongtitude().tostring() + "?z="; uri geo = uri.parse(geouri); intent geomap = new intent(intent.action_view,geo); startactivity(geomap); } }); visliste.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { //stasjonasynctask } }); bildebutton.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { intent intent = new intent(mainactivity.this, customcameraactivity.class); startactivity(intent); } }); kjortil.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { intent intent = new intent(android.content.intent.action_view, uri.parse("http://maps.google.com/maps?saddr=" + gps.getlatitude() +"," + gps.getlongitude() + "&daddr=" + double.parsedouble(stasjon.getlatitude()) +","+double.parsedouble(stasjon.getlongtitude()))); startactivity(intent); } }); } @override public void onlocationchanged(location location) { } @override public void onstatuschanged(string provider, int status, bundle extras) { } @override public void onproviderenabled(string provider) { } @override public void onproviderdisabled(string provider) { } public class stasjonasynctask extends asynctask<string, void, boolean>{ @override protected boolean doinbackground(string... urls) { try { httpclient client = new defaulthttpclient(); //httppost post = new httppost(urls[0]); api endpointas nepriima post requestu, pakeiciam httpget = new httpget(urls[0]); httpresponse response = client.execute(get); int status = response.getstatusline().getstatuscode(); if(status == 200) { httpentity entity = response.getentity(); string data = entityutils.tostring(entity); jsonobject jobj = new jsonobject(data); jarray = jobj.getjsonarray("entries"); avstand = new double[jarray.length()]; for(int i=0;i< jarray.length();i++){ stasjon = new stasjoner(); jsonobject jrealobject = jarray.getjsonobject(i); stasjon.setid(jrealobject.getstring("id")); stasjon.setkapasitet(jrealobject.getstring("kapasitet")); stasjon.setplassering(jrealobject.getstring("plassering")); stasjon.settilgjengelighet(jrealobject.getstring("tilgjengelighet")); stasjon.setbeskrivelse(jrealobject.getstring("beskrivelse")); stasjon.setnavn(jrealobject.getstring("navn")); stasjon.setlongtitude(jrealobject.getstring("longitude")); stasjon.setlatitude(jrealobject.getstring("latitude")); stasjon.settilgang(jrealobject.getstring("tilgang")); stasjon.settidsbegrensing(jrealobject.getstring("tidsbegrensing")); double dist = distance(double.parsedouble(stasjon.getlatitude()), double.parsedouble(stasjon.getlongtitude()), gps.getlatitude(),gps.getlongitude(), 'k'); stasjon.setavstand(double.tostring(dist)); avstand[i]= dist; stasjonliste.add(stasjon); } return true; } } catch (ioexception e) { e.printstacktrace(); } catch (jsonexception e) { e.printstacktrace(); } return false; } protected void onpostexecute(boolean result) { super.onpostexecute(result); //arrays.sort(avstand); minvalue = getminvalue(avstand); //test.settext(double.tostring(minvalue)); if(result== false){ toast.maketext(getapplicationcontext(), "unable fetch data server", toast.length_long).show(); } else { stasjonadapter adapter = new stasjonadapter(getapplicationcontext(),r.layout.rad, stasjonliste); list.setadapter(adapter); } } private double distance(double lat1, double lon1, double lat2, double lon2, char unit) { double theta = lon1 - lon2; double dist = math.sin(deg2rad(lat1)) * math.sin(deg2rad(lat2)) + math.cos(deg2rad(lat1)) * math.cos(deg2rad(lat2)) * math.cos(deg2rad(theta)); dist = math.acos(dist); dist = rad2deg(dist); dist = dist * 60 * 1.1515; if (unit == 'k') { dist = dist * 1.609344; } else if (unit == 'n') { dist = dist * 0.8684; } return (dist); } private double deg2rad(double deg) { return (deg * math.pi / 180.0); } private double rad2deg(double rad) { return (rad * 180.0 / math.pi); } } public static double getminvalue(double[] numbers){ double minvalue = numbers[0]; int minvalueindex = 0; for(int i=1;i<numbers.length;i++){ if(numbers[i] < minvalue){ minvalue = numbers[i]; minvalueindex = i; } } return minvalueindex; } }
in stasjonasynctask make activity class variable. , give it's instance when creating stasjonasynctask variable
public class stasjonasynctask extends asynctask<string, void, boolean>{ private mainactivity myactivity; public stasjonasynctask(mainactivity myactivity){ this.myactivity=myactivity; } ...
on creating stasjonasynctask give activity instance
new stasjonasynctask(this).execute("http://hotell.difi.no/api/json/porsgrunn/elbilparkering?");
in onpostexecute
can call function of activity. separate onclick
listener variable, easier understand.
Comments
Post a Comment