Android Using Multiple methods inside Asynctask -
i'm trying run background asynctask load in data.
have 2 methods load in data , i'm running them in asynctask
.
when it's done loading have method called filldata
fills ui data.
the problem @ moment it's filling ui whichever method finishes downloading data first.
there way run multiple methods inside 1 asynctask
or need multiple asynctasks
?
here's asynctask
public class posttask extends asynctask<void, string, boolean> { @override protected boolean doinbackground(void... params) { boolean result = false; loadnewsfeed(); loadresultsfeed(); publishprogress("progress"); return result; } protected void onprogressupdate(string... progress) { stringbuilder str = new stringbuilder(); (int = 1; < progress.length; i++) { str.append(progress[i] + " "); } } @override protected void onpostexecute(boolean result) { super.onpostexecute(result); log.v("bgthread", "begin fillin data"); filldata(); } }
heres full code
public void checkpreferences(){ sharedpreferences preferences = getsharedpreferences("prefs", context.mode_private); chosenmethod = preferences.getstring("chosenmethod", chosenmethod); chosenleagueid = preferences.getstring("chosenleagueid", chosenleagueid); chosenteamid = preferences.getstring("chosenteamid", chosenteamid); log.v("lc", "newsurl" + newsfeedurl); log.v("myapp", "chosenmethod home = " + chosenmethod); log.v("myapp", "chosenleagueid home = " + chosenleagueid); log.v("myapp", "chosenteamid home = " + chosenteamid); if (chosenmethod.equals("team")) { setcontentview(r.layout.homeactteam2); newsamount = 5; } else { newsamount = 10; setcontentview(r.layout.homeactteam); } } @override protected void oncreate(bundle savedinstancestate) { // todo auto-generated method stub super.oncreate(savedinstancestate); //check preferences sets ui checkpreferences(); posttask posttask; posttask = new posttask(); posttask.execute(); button backbtn = (button) findviewbyid(r.id.backbtn); //listening button event backbtn.setonclicklistener(new view.onclicklistener() { public void onclick(view arg0) { //starting new intent intent previousscreen = new intent(getapplicationcontext(), chooseteamactivity.class); chosenmethod = "null"; sharedpreferences preferences = getsharedpreferences("prefs", context.mode_private); sharedpreferences.editor editor = preferences.edit(); editor.putstring("chosenmethod", chosenmethod); editor.commit(); previousscreen.putextra("fulldata", fulldata); startactivity(previousscreen); } }); //((pulltorefreshlistview) getlistview()).setonrefreshlistener(new onrefreshlistener() { // // public void onrefresh() { // // work refresh list here. // loaddata(); // } //}); // } public void loadnewsfeed(){ newsfeedrequest = "" + chosenleagueid + "" + unixtimestamp; newsfeedurl = "" + newsfeedrequest; string myhash = buildhmacsignature(apikey, newsfeedurl); httpclient client = new defaulthttpclient(); httppost post = new httppost(newsfeedurl); list<namevaluepair> pairs = new arraylist<namevaluepair>(); pairs.add(new basicnamevaluepair("requesttoken", myhash)); pairs.add(new basicnamevaluepair("apiuser", apiuser)); try { post.setentity (new urlencodedformentity(pairs)); httpresponse response = client.execute(post); bufferedreader reader = new bufferedreader(new inputstreamreader(response.getentity().getcontent(), "utf-8")); string json = reader.readline(); fulldata = string.valueof(json); log.v("myapp","newsdata" + fulldata); newslist = new arraylist<string>(); newslist2 = new arraylist<string>(); newslist3 = new arraylist<string>(); imagelist = new arraylist<string>(); jsonobject obj = new jsonobject(json); jsonobject objdata = obj.getjsonobject("data"); jsonarray jarray = objdata.getjsonarray("news"); log.v("lc","newsamount= " + newsamount); for(int t = 0; t < newsamount; t++){ jsonobject newstitledict = jarray.getjsonobject(t); imagelist.add(newstitledict.getstring("image_small")); newslist3.add(newstitledict.getstring("title")); } for(int t = 0; t < 1; t++){ jsonobject newstitledict = jarray.getjsonobject(t); newslist.add(newstitledict.getstring("title")); // newslist2.add(newstitledict.getstring("title")); } log.v("bgthread", "loaded news"); loadresultsfeed(); } catch (clientprotocolexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (jsonexception e) { // todo auto-generated catch block e.printstacktrace(); } } public void loadresultsfeed(){ resultsfeedrequest = "" + chosenleagueid + "" + chosenteamid + "" + unixtimestamp; resultsfeedurl = "https://secure.pitchero.com/_services/api/" + resultsfeedrequest; string myhash = buildhmacsignature(apikey, resultsfeedurl); httpclient client = new defaulthttpclient(); httppost post = new httppost(resultsfeedurl); list<namevaluepair> pairs = new arraylist<namevaluepair>(); pairs.add(new basicnamevaluepair("requesttoken", myhash)); pairs.add(new basicnamevaluepair("apiuser", apiuser)); try { post.setentity (new urlencodedformentity(pairs)); httpresponse response = client.execute(post); bufferedreader reader = new bufferedreader(new inputstreamreader(response.getentity().getcontent(), "utf-8")); string json = reader.readline(); fulldata = string.valueof(json); log.v("myapp","resultsdata" + fulldata); newslist = new arraylist<string>(); newslist2 = new arraylist<string>(); newslist3 = new arraylist<string>(); imagelist = new arraylist<string>(); jsonobject obj = new jsonobject(json); jsonobject objdata = obj.getjsonobject("data"); jsonarray jarray = objdata.getjsonarray("results"); if(jarray.length() < 1) loadlastresults(); for(int t = 0; t < 1; t++){ resultsdict = jarray.getjsonobject(t); hometeam = resultsdict.getstring("hometeam"); awayteam = resultsdict.getstring("awayteam"); homescore = resultsdict.getstring("homescore"); awayscore = resultsdict.getstring("awayscore"); attendance = resultsdict.getstring("attendance"); division = resultsdict.getstring("division"); log.v("lc","hometeam" + hometeam); log.v("lc","awayteam" + awayteam); log.v("bgthread", "loaded results"); } } catch (clientprotocolexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (jsonexception e) { // todo auto-generated catch block e.printstacktrace(); } } public void loadlastresults(){ resultsfeedrequest = "" + chosenleagueid + "" + chosenteamid + "&limit=31×tamp=" + unixtimestamp; resultsfeedurl = "" + resultsfeedrequest; string myhash = buildhmacsignature(apikey, resultsfeedurl); date anothercurdate = new date(); simpledateformat formatter = new simpledateformat("mm"); string curmonth = formatter.format(anothercurdate); int int = integer.parseint(curmonth); int monthint = int -1; curmonth = (string) (string.valueof(monthint)); if (curmonth.equals("1")){ lastmonth = "12"; } else { if(curmonth.length() < 2){ lastmonth = "0" + curmonth; } else { lastmonth = curmonth; } } log.v("lc","month= " + curmonth); log.v("lc","lastmonth= " + lastmonth); httpclient client = new defaulthttpclient(); httppost post = new httppost(resultsfeedurl); list<namevaluepair> pairs = new arraylist<namevaluepair>(); pairs.add(new basicnamevaluepair("requesttoken", myhash)); pairs.add(new basicnamevaluepair("apiuser", apiuser)); try { post.setentity (new urlencodedformentity(pairs)); httpresponse response = client.execute(post); bufferedreader reader = new bufferedreader(new inputstreamreader(response.getentity().getcontent(), "utf-8")); string json = reader.readline(); fulldata = string.valueof(json); log.v("myapp","resultsdata" + fulldata); newslist = new arraylist<string>(); newslist2 = new arraylist<string>(); newslist3 = new arraylist<string>(); imagelist = new arraylist<string>(); jsonobject obj = new jsonobject(json); jsonobject objdata = obj.getjsonobject("data"); jsonarray jarray = objdata.getjsonarray("results"); for(int t = 0; t < 1; t++){ resultsdict = jarray.getjsonobject(t); hometeam = resultsdict.getstring("hometeam"); awayteam = resultsdict.getstring("awayteam"); homescore = resultsdict.getstring("homescore"); awayscore = resultsdict.getstring("awayscore"); attendance = resultsdict.getstring("attendance"); division = resultsdict.getstring("division"); log.v("lc","hometeam" + hometeam); log.v("lc","awayteam" + awayteam); log.v("bgthread", "loaded last results"); } } catch (clientprotocolexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (jsonexception e) { // todo auto-generated catch block e.printstacktrace(); } } public class posttask extends asynctask<void, string, boolean> { @override protected boolean doinbackground(void... params) { boolean result = false; loadnewsfeed(); publishprogress("method1_complete"); loadresultsfeed(); publishprogress("method2_complete"); return result; } protected void onprogressupdate(string... progress) { stringbuilder str = new stringbuilder(); (int = 1; < progress.length; i++) { str.append(progress[i] + " "); } } @override protected void onpostexecute(boolean result) { super.onpostexecute(result); log.v("bgthread", "begin fillin data"); filldata(); } } public void filldata(){ if (chosenmethod.equals("team")) { arrayadapter = new arrayadapter<string>(this, r.layout.single_item, newslist); string[] mstrings = (string[]) imagelist.toarray(new string[imagelist.size()]); string[] news = (string[]) newslist3.toarray(new string[newslist3.size()]); arrayadapter3 = new lazyadapter(this, mstrings, news); listview list = getlistview(); list.settextfilterenabled(true); layoutinflater inflater = (layoutinflater) this.getsystemservice(context.layout_inflater_service ); view header = inflater.inflate( r.layout.homeheader, list, false); view header2 = inflater.inflate( r.layout.homeheader2, list, false); view header3 = inflater.inflate( r.layout.homeheader3, list, false); //setlistadapter (arrayadapter); resultsview = layoutinflater.from(getbasecontext()).inflate(r.layout.resultscell, null); textview hometeam = (textview) resultsview.findviewbyid(r.id.hometeam); hometeam.settext(hometeam); textview awayteam = (textview) resultsview.findviewbyid(r.id.awayteam); awayteam.settext(awayteam); textview homescore = (textview) resultsview.findviewbyid(r.id.homescore); homescore.settext(homescore); textview awayscore = (textview) resultsview.findviewbyid(r.id.awayscore); awayscore.settext(awayscore); textview attendance = (textview) resultsview.findviewbyid(r.id.attendence); attendance.settext("att:" + attendance); textview division = (textview) resultsview.findviewbyid(r.id.division); division.settext(division); log.v("bgthread", "filled results"); adapter = new mergeadapter(); adapter.addview(header); adapter.addadapter(arrayadapter); adapter.addview(header2); adapter.addview(resultsview); adapter.addview(header3); adapter.addadapter(arrayadapter3); setlistadapter(adapter); log.v("bgthread", "filled merge adapter team"); } else { arrayadapter = new arrayadapter<string>(this, r.layout.single_item, newslist); arrayadapter2 = new arrayadapter<string>(this, r.layout.single_item, newslist2); //arrayadapter3 = new arrayadapter(this, r.layout.complex_item, newslist3); string[] mstrings = (string[]) imagelist.toarray(new string[imagelist.size()]); string[] news = (string[]) newslist3.toarray(new string[newslist3.size()]); arrayadapter3 = new lazyadapter(this, mstrings, news); listview list = getlistview(); list.settextfilterenabled(true); layoutinflater inflater = (layoutinflater) this.getsystemservice(context.layout_inflater_service ); view header3 = inflater.inflate( r.layout.homeheader3, list, false); //setlistadapter (arrayadapter); adapter = new mergeadapter(); adapter.addview(header3); adapter.addadapter(arrayadapter3); setlistadapter(adapter); log.v("bgthread", "filled merge adapter league"); } }
both methods executed sequentially, because they're in 1 asynctask
: first loadnewsfeed()
executed, if that's finished, loadresultsfeed()
executed.
so viewing code example, there's no evidence of 1 or more methods not being executed.
Comments
Post a Comment