Sunday 15 June 2014

android -java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification with Adapter -



android -java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification with Adapter -

i error on different version of android , different devices .i've test on several devices self , didn't problems on devices keeps showing me error

this listadapter code :

listadapter ladap; private class getcontacts extends asynctask<void, void, void> { @override protected void doinbackground(void... arg0) { spots_tab1_json sh = new spots_tab1_json(); string jsonstr = sh.makeservicecall(url + page, spots_tab1_json.get); if (jsonstr != null) { seek { jsonobject jsonobj = new jsonobject(jsonstr); contacts = jsonobj.getjsonarray(tag_contacts); (int = 0; < contacts.length(); i++) { jsonobject c = contacts.getjsonobject(i); string id = new string(c.getstring("id").getbytes("iso-8859-1"), "utf-8"); string dates = new string(c.getstring("dates").getbytes("iso-8859-1"), "utf-8"); string cost = new string(c.getstring("gheymat").getbytes("iso-8859-1"), "utf-8"); hashmap<string, string> contact = new hashmap<string, string>(); contact.put("id", id); contact.put("dates", dates); contact.put("price", price); contactlist.add(contact); } } } grab (jsonexception e) { goterr = true; } grab (unsupportedencodingexception e) { goterr = true; } } else { goterr = true; } homecoming null; } @override protected void onpostexecute(void result) { super.onpostexecute(result); if (!iscancelled() && goterr == false) { if(ladap==null){ ladap=new listadapter(mainactivity.this, contactlist); lv.setadapter(ladap); }else{ ladap.addall(contactlist); } } } public class listadapter extends baseadapter { activity activity; public arraylist<hashmap<string, string>> list; public listadapter(activity activity,arraylist<hashmap<string, string>> list) { super(); this.activity = (activity) activity; this.list = list; } public void addall(arraylist<hashmap<string, string>> contactlist) { this.list = contactlist; notifydatasetchanged(); } public int getcount() { homecoming contactlist.size(); } public object getitem(int position) { homecoming contactlist.get(position); } public long getitemid(int arg0) { homecoming 0; } private class viewholder { textview title,price; imageview img ; //relativelayout rl; } public view getview(int position, view convertview, viewgroup parent) { viewholder holder; layoutinflater inflater = activity.getlayoutinflater(); if (convertview == null) { convertview = inflater.inflate(r.layout.item, null); holder = new viewholder(); holder.title = (textview) convertview.findviewbyid(r.id.title); holder.price = (textview) convertview.findviewbyid(r.id.price); convertview.settag(holder); } else { holder = (viewholder) convertview.gettag(); } item = contactlist.get(position); holder.price.settext(item.get("price")); homecoming convertview; } }

in above code, when comes onpostexcecute() , checks if ladab null ,if null comes in , create listadapter (i've logged , comes in 1 time ) , after , comes addall method , add together new items adapter .

this log :

stack_trace = java.lang.illegalstateexception: content of adapter has changed listview did not receive notification. create sure content of adapter not modified background thread, ui thread. [in listview(2131034188, class android.widget.listview) adapter(class xx.xx.mainactivity$listadapter)] @ android.widget.listview.layoutchildren(listview.java:1517) @ android.widget.abslistview.onlayout(abslistview.java:1925) @ android.view.view.layout(view.java:7462) @ android.widget.relativelayout.onlayout(relativelayout.java:962) @ android.view.view.layout(view.java:7462) @ android.widget.linearlayout.setchildframe(linearlayout.java:1268) @ android.widget.linearlayout.layoutvertical(linearlayout.java:1140) @ android.widget.linearlayout.onlayout(linearlayout.java:1057) @ android.view.view.layout(view.java:7462) @ android.widget.framelayout.onlayout(framelayout.java:338) @ android.view.view.layout(view.java:7462) @ android.support.v4.widget.drawerlayout.onlayout(drawerlayout.java:743) @ android.view.view.layout(view.java:7462) @ android.widget.linearlayout.setchildframe(linearlayout.java:1268) @ android.widget.linearlayout.layoutvertical(linearlayout.java:1140) @ android.widget.linearlayout.onlayout(linearlayout.java:1057) @ android.view.view.layout(view.java:7462) @ android.widget.framelayout.onlayout(framelayout.java:338) @ android.view.view.layout(view.java:7462) @ android.widget.linearlayout.setchildframe(linearlayout.java:1268) @ android.widget.linearlayout.layoutvertical(linearlayout.java:1140) @ android.widget.linearlayout.onlayout(linearlayout.java:1057) @ android.view.view.layout(view.java:7462) @ android.widget.framelayout.onlayout(framelayout.java:338) @ android.view.view.layout(view.java:7462) @ android.widget.framelayout.onlayout(framelayout.java:338) @ android.view.view.layout(view.java:7462) @ android.view.viewroot.performtraversals(viewroot.java:1140) @ android.view.viewroot.handlemessage(viewroot.java:1859) @ android.os.handler.dispatchmessage(handler.java:99) @ android.os.looper.loop(looper.java:130) @ android.app.activitythread.main(activitythread.java:3694) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:507) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:860) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:618) @ dalvik.system.nativestart.main(native method)

what problem of code ? i've done didn't manage solve .

could help me /

thank you

i got little bit confuse on code here :

if (!iscancelled() && goterr == false) { if(ladap==null){ ladap=new listadapter(mainactivity.this, contactlist); lv.setadapter(ladap); }else{ ladap.addall(contactlist); } }

lets say, code run 1st time, :

iscancelled() false

goterr false

ladap null, because has not been created.

if 3 happened, ladap.addall(contactlist); not called because if(ladap==null) true.

try create :

if (!iscancelled() && goterr == false) { if(ladap==null){ ladap=new listadapter(mainactivity.this, contactlist); lv.setadapter(ladap); } ladap.addall(contactlist); //no neet else }

update

try :

if (!iscancelled() && goterr == false) { if(ladap==null){ ladap=new listadapter(mainactivity.this, contactlist); lv.setadapter(ladap); } ladap.addall(contactlist); //no neet else lv.invalidateviews(); //lv.invalidate(); //try phone call if invalidateviews not working, trial - error here }

or, can move ladap=new listadapter(mainactivity.this, contactlist); , set adapter oncreate.

android android-listview

No comments:

Post a Comment