java - Android: AsyncTask UI update issue -


in code below, i'm trying create listactivity. elements of list being filled custom arrayadapter - orderadapter.

all element fetching mechanism inside asynctask class. i'm able toset elements in m_adapter, not able update ui of list.

the activity getting force closed.

code:

public class softwarepassionview extends listactivity { private progressdialog m_progressdialog = null; private arraylist<order> m_orders = null; private orderadapter m_adapter; // defined below private runnable vieworders; @override protected void oncreate(bundle savedinstancestate) { try { super.oncreate(savedinstancestate); setcontentview(r.layout.softwarepassionview); m_adapter = new orderadapter(softwarepassionview.this, r.layout.row, m_orders); new asyncoperation().execute(); } catch (exception e) { toast.maketext(this, e.tostring(), toast.length_short).show(); } } public class orderadapter extends arrayadapter<order> { private arraylist<order> items; public orderadapter(context context, int textviewresourceid, arraylist<order> elements) { super(context, textviewresourceid, elements); this.items = elements; } public void setlist(arraylist<order> items) { this.items = new arraylist<order>(); this.items.addall(items); } @override public view getview(int position, view convertview, viewgroup parent) { super.getview(position, convertview, parent); view v = convertview; try { if (v == null) { layoutinflater vi = (layoutinflater) getsystemservice(context.layout_inflater_service); v = vi.inflate(r.layout.row, null); } order o = items.get(position); if (o != null) { textview ordername = (textview) v .findviewbyid(r.id.toptext); textview orderstatus = (textview) v .findviewbyid(r.id.bottomtext); ordername.settext(o.getordername()); orderstatus.settext(o.getorderstatus()); } } catch (exception e) { toast.maketext(softwarepassionview.this, e.tostring(), toast.length_short).show(); } return v; } } public class asyncoperation extends asynctask { @override protected void onpreexecute() { super.onpreexecute(); } @override protected object doinbackground(object... params) { getorders(); if (m_orders != null && m_orders.size() > 0) { m_adapter.setlist(m_orders); } return null; } @override protected void onpostexecute(object result) { super.onpostexecute(result); m_adapter.notifydatasetchanged(); setlistadapter(m_adapter); } } private void getorders() { try { m_orders = new arraylist<order>(); order o1 = new order(); o1.setordername("t-shirt purchase"); o1.setorderstatus("dispatched"); order o2 = new order(); o2.setordername("deo purchase"); o2.setorderstatus("pending"); m_orders.add(o1); m_orders.add(o2); thread.sleep(2000); } catch (exception e) { toast.maketext(this, e.tostring(), toast.length_short).show(); } } } 

i have fix error try now

public class softwarepassionview extends listactivity { private progressdialog m_progressdialog = null; private arraylist<order> m_orders = new arraylist<order>(); //why have putting null? private orderadapter m_adapter; // defined below private runnable vieworders; @override protected void oncreate(bundle savedinstancestate) { try { super.oncreate(savedinstancestate); setcontentview(r.layout.softwarepassionview); m_adapter = new orderadapter(softwarepassionview.this, r.layout.row, m_orders); setlistadapter(m_adapter); // getting npe have not init "m_orders" new asyncoperation().execute(); } catch (exception e) { toast.maketext(this, e.tostring(), toast.length_short).show(); } } public class orderadapter extends baseadapter { private arraylist<order> items=new arraylist<order>(); public orderadapter(context context, int textviewresourceid, arraylist<order> elements) { //super(context, textviewresourceid, elements); this.items = elements; } public void setlist(arraylist<order> items) { this.items.clear(); this.items.addall(items); this.notifydatasetchanged(); } @override public view getview(int position, view convertview, viewgroup parent) { super.getview(position, convertview, parent); view v = convertview; try { if (v == null) { layoutinflater vi = (layoutinflater) getsystemservice(context.layout_inflater_service); v = vi.inflate(r.layout.row, null); } order o = items.get(position); if (o != null) { textview ordername = (textview) v .findviewbyid(r.id.toptext); textview orderstatus = (textview) v .findviewbyid(r.id.bottomtext); ordername.settext(o.getordername()); orderstatus.settext(o.getorderstatus()); } } catch (exception e) { toast.maketext(softwarepassionview.this, e.tostring(), toast.length_short).show(); } return v; } public int getcount() { return this.items.size(); } public object getitem(int arg0) { // todo auto-generated method stub return this.items.get(arg0); } public long getitemid(int arg0) { // todo auto-generated method stub return 0; } } public class asyncoperation extends asynctask { @override protected void onpreexecute() { super.onpreexecute(); } @override protected object doinbackground(object... params) { getorders(); // if (m_orders != null && m_orders.size() > 0) { no nead set list here // m_adapter.setlist(m_orders); // } return null; } @override protected void onpostexecute(object result) { if (m_orders != null && m_orders.size() > 0) { m_adapter.setlist(m_orders); } super.onpostexecute(result); //setlistadapter(m_adapter); } } private void getorders() { try { m_orders = new arraylist<order>(); order o1 = new order(); o1.setordername("t-shirt purchase"); o1.setorderstatus("dispatched"); order o2 = new order(); o2.setordername("deo purchase"); o2.setorderstatus("pending"); m_orders.add(o1); m_orders.add(o2); thread.sleep(2000); } catch (exception e) { toast.maketext(this, e.tostring(), toast.length_short).show(); } } 

}


Comments

Popular posts from this blog

javascript - backbone.js Collection.add() doesn't `construct` (`initialize`) an object -

c++ - Accessing inactive union member and undefined behavior? -

php - Get uncommon values from two or more arrays -