java - Load fetched Images into listView Using SimpleAdapter -
i'm stuck problem. fetched image web url(though localhost) , other stuffs too. however, other stuffs showed images not. can't figured out what's wrong. i'm posting code of class. check out. here code:
public void updatejsondata() { int success; bitmap photo = null; intent in = getintent(); bundle extras = in.getextras(); string city = extras.getstring("city"); log.d(tag, "city received: " + city); try { jsonparser jparser = new jsonparser(); list<namevaluepair> params = new arraylist<namevaluepair>(); params.add(new basicnamevaluepair("city", city)); jsonobject json = jparser.makehttprequest(fetch_hostel_url, "post", params); log.d("json response", json.tostring()); success = json.getint(tag_success); if (success == 1) { mhostels = json.getjsonarray(tag_hostels); mhostellist = new arraylist<hashmap<string, object>>(); (int = 0; < mhostels.length(); i++) { jsonobject c = mhostels.getjsonobject(i); drawable d = null; string hos_name = c.getstring(tag_name); string hos_rent = c.getstring(tag_rent); // string hos_img = c.getstring(tag_img); string hos_imgurl = "http://192.168.2.10:80/homey_uploads/avtars/img_-137606592.jpg"; try { getbitmapfromurl(hos_imgurl); photo = bmp; citycap.setimagebitmap(photo); } catch (exception ex) { log.d(tag, "bitmap not received"); } hashmap<string, object> map = new hashmap<string, object>(); map.put(tag_name, hos_name); map.put(tag_rent, hos_rent); map.put(tag_img, photo); mhostellist.add(map); log.d(tag, "map addedd!!" + mhostellist.tostring()); } } else if (success == 0) { log.d(tag, "fetch failure!!"); done = false; msg = json.getstring(tag_message); } } catch (exception e) { log.d(tag, "exception occured:" + e.tostring()); done = false; } } private static bitmap getbitmapfromurl(string hos_imgurl) throws ioexception { url imgurl = new url(hos_imgurl); log.d(tag, "image url:" + imgurl.tostring()); httpurlconnection conn = (httpurlconnection) imgurl.openconnection(); conn.setdoinput(true); conn.connect(); conn.setconnecttimeout(30000); conn.setreadtimeout(30000); inputstream = conn.getinputstream(); bmp = bitmapfactory.decodestream(is); return bmp; } public void updatelist() { // lazyadapter adapter = new lazyadapter(searchresult.this, // mhostellist); listadapter adapter = new simpleadapter(searchresult.this, mhostellist, r.layout.single_hostel, new string[] { tag_name, tag_rent, tag_img }, new int[] { r.id.tv_h_name, r.id.tv_h_rent, r.id.iv_h_frontpic }); simpleadapter.viewbinder viewbinder = new simpleadapter.viewbinder() { @override public boolean setviewvalue(view view, object data, string textrepresentation) { if (view.getid() == r.id.tv_h_name) { ((textview) view).settext((string) data); return true; } else if (view.getid() == r.id.tv_h_rent) { ((textview) view).settext((string) data); } else if (view.getid() == r.id.iv_h_frontpic) { ((imageview) view).setimagebitmap((bitmap) data); } return false; } }; ((simpleadapter) adapter).setviewbinder(viewbinder); setlistadapter(adapter); listview lv = getlistview(); lv.setonitemclicklistener(new onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { intent intent = new intent(searchresult.this, hdetailtabactivity.class); startactivity(intent); } }); } public class loadhostels extends asynctask<void, void, boolean> { @override protected void onpreexecute() { super.onpreexecute(); pdialog = new progressdialog(searchresult.this); pdialog.setmessage("loading hostels"); pdialog.setindeterminate(false); pdialog.setcancelable(true); pdialog.show(); } @override protected boolean doinbackground(void... arg0) { updatejsondata(); return null; } @override protected void onpostexecute(boolean result) { super.onpostexecute(result); pdialog.dismiss(); if (done != true) { toast.maketext(searchresult.this, "error:" + msg, toast.length_long).show(); } else if (done = true) { updatelist(); } } }
logcat says unable decodestream when set image imageview itshowed up. attaching logcat:
04-12 14:38:34.857: d/tracking...(8616): map addedd!![{h_img=android.graphics.bitmap@4149d108, h_name=m r hostel, h_d_mrent=4500}, {h_img=android.graphics.bitmap@41600b78, h_name=hostel of achievers, h_d_mrent=3500}, {h_img=android.graphics.bitmap@414edd18, h_name=hostel of care, h_d_mrent=2500}] 04-12 14:38:34.860: d/openglrenderer(8616): flushing caches (mode 0) 04-12 14:38:34.898: e/bitmapfactory(8616): unable decode stream: java.io.filenotfoundexception: /android.graphics.bitmap@4149d108: open failed: enoent (no such file or directory) 04-12 14:38:34.898: i/system.out(8616): resolveuri failed on bad bitmap uri: android.graphics.bitmap@4149d108 04-12 14:38:34.914: e/bitmapfactory(8616): unable decode stream: java.io.filenotfoundexception: /android.graphics.bitmap@41600b78: open failed: enoent (no such file or directory) 04-12 14:38:34.914: i/system.out(8616): resolveuri failed on bad bitmap uri: android.graphics.bitmap@41600b78 04-12 14:38:34.929: e/bitmapfactory(8616): unable decode stream: java.io.filenotfoundexception: /android.graphics.bitmap@414edd18: open failed: enoent (no such file or directory) 04-12 14:38:34.929: i/system.out(8616): resolveuri failed on bad bitmap uri: android.graphics.bitmap@414edd18
please help!!!
simpleadapter
doesn't support setting bitmap
s imageview
s out of box -- resource id or string url.
so, need extend simpleadapter.viewbinder
provide own binding logic:
simpleadapter.viewbinder viewbinder = new simpleadapter.viewbinder() { @override public boolean setviewvalue(view view, object data, string textrep) { if (view.getid() == r.id.tv_h_name) { ((textview)view).settext((string)data); return true; } else if (view.getid() == r.id.tv_h_rent) { // same here } else if (view.getid() == r.id.iv_h_frontpic) { ((imageview)view).setimagebitmap((bitmap)data); return true; } return false; } } ((simpleadapter)adapter).setviewbinder(viewbinder);
Comments
Post a Comment