android - Can't set ListView Adapter from AsyncThread -



android - Can't set ListView Adapter from AsyncThread -

i'm using listview on activity , takes while load sqlite db, wanted show progressdialog user allow them know loading. tried run task on separate thread i'm getting calledfromwrongthreadexception. here's main activity code:

@override public void oncreate(bundle savedinstancestate) { seek { super.oncreate(savedinstancestate); requestwindowfeature(window.feature_custom_title); setcontentview(r.layout.open_issues); getwindow().setfeatureint(window.feature_custom_title, r.layout.custom_title); //set window title. final textview title = (textview) findviewbyid(r.id.customtitle); if (title != null) title.settext("open issues"); //call async task run in background. new loadissuestask().execute(); } grab (exception e) { errors.logerror(e); } }

and loadissuestask code:

private class loadissuestask extends asynctask<void, void, cursor> { progressdialog pddialog = null; protected void onpreexecute() { seek { pddialog = new progressdialog(openissues.this); pddialog.setmessage("loading issues , activities, please wait..."); pddialog.show(); } grab (exception e) { errors.logerror(e); } } @override protected cursor doinbackground(void... params) { loadissues(); homecoming null; } @override protected void onpostexecute(cursor c) { pddialog.dismiss(); pddialog = null; } }

and loadissues code:

private void loadissues(){ //set listview of issues. listview lvissues = (listview)findviewbyid(r.id.lvissues); lvissues.setonitemclicklistener(viewissueslistener); issuecreator = new issueinfocreator(this, integer.parseint(apppreferences.mdbversion)); issuecreator.open(); lvissues.setadapter(new issueinfoadapter(this, issuecreator.queryall())); issuecreator.close(); }

constructor issueinfoadapter:

public issueinfoadapter(context c, list<issueinfo> list){ mlistissueinfo = list; //create layout inflater. minflater = layoutinflater.from(c); }

it's throwing error on .setadapter method within loadissues(). error:

03-12 10:41:23.174: e/androidruntime(11379): caused by: android.view.viewrootimpl$calledfromwrongthreadexception: original thread created view hierarchy can touch views.

you're trying access views in doinbackground method doesn't run on main ui thread. you'll have set adapter in method onpostexecute runs on ui thread:

@override protected void onpostexecute(list<isueinfo> items) { pddialog.dismiss(); listview lvissues = (listview)findviewbyid(r.id.lvissues); lvissues.setonitemclicklistener(viewissueslistener); lvissues.setadapter(new issueinfoadapter(this, items)); }

and in doinbackground method:

@override protected list<issueinfo> doinbackground(void... params) { issuecreator = new issueinfocreator(this, integer.parseint(apppreferences.mdbversion)); issuecreator.open(); issuecreator.close(); homecoming issuecreator.queryall(); }

also asynctask should be:

private class loadissuestask extends asynctask<void, void, list<issueinfo>>

android

Comments

Popular posts from this blog

model view controller - MVC Rails Planning -

ruby on rails - Devise Logout Error in RoR -

html - Submenu setup with jquery and effect 'fold' -