hello i'm beginner in anroid. created navigation drawer , fragments. can getting data json url. it's working while online. phone when offline i'm getting "unable resolve host" error. want data url json while offline. it's not caching enter image description here
fragment
private static final string jsonurl = "http://sunumsitesi.com/json.php"; private progressdialog pdialog; private list<urun> urunlist = new arraylist<urun>(); private listview listview; private customlistadapter adapter; @nullable @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view root = inflater.inflate(r.layout.fragment_yemek, container, false); return root; } @override public void onactivitycreated(bundle savedinstancestate) { super.onactivitycreated(savedinstancestate); view v = getview(); if(v!=null) { listview = (listview) v.findviewbyid(r.id.yemeklist); adapter = new customlistadapter(getactivity(), urunlist); listview.setadapter(adapter); pdialog = new progressdialog(getactivity()); pdialog.setmessage("loading..."); pdialog.show(); jsonarrayrequest urunreq = new jsonarrayrequest(jsonurl, new response.listener<jsonarray>() { @override public void onresponse(jsonarray response) { hidepdialog(); (int = 0; < response.length(); i++) { try { jsonobject obj = response.getjsonobject(i); urun urun = new urun(); urun.seturun_adi(obj.getstring("urun_adi")); urun.seturl("http://www.iremdeveci.com/ornekler/resimler/resim.png");//example urunlist.add(urun); } catch (jsonexception ex) { ex.printstacktrace(); } } adapter.notifydatasetchanged(); } }, new response.errorlistener() { @override public void onerrorresponse(volleyerror volleyerror) { toast.maketext(getactivity(), volleyerror.getmessage(), toast.length_long).show(); } }); appcontroller.getminstance().addtorequestqueue(urunreq); } } @override public void ondestroy() { super.ondestroy(); hidepdialog(); } private void hidepdialog() { if(pdialog!=null) { pdialog.dismiss(); pdialog=null; } }
and customlistadapter(extend baseadapter)
private activity activity; private layoutinflater inflater; private list<urun> urunitems; imageloader imageloader = appcontroller.getminstance().getmimageloader(); public customlistadapter(activity activity,list<urun> urunitems) { this.activity=activity; this.urunitems=urunitems; } @override public int getcount() { return urunitems.size(); } @override public object getitem(int location) { return urunitems.get(location); } @override public long getitemid(int position) { return position; } @override public view getview(int position, view convertview, viewgroup parent) { if (inflater==null) { inflater=(layoutinflater)activity.getsystemservice(context.layout_inflater_service); } if (convertview==null) { convertview=inflater.inflate(r.layout.list_row,null); } if (imageloader==null) { imageloader=appcontroller.getminstance().getmimageloader(); } networkimageview urunresim=(networkimageview)convertview.findviewbyid(r.id.urunresim); textview urun_adi= (textview)convertview.findviewbyid(r.id.urun_adi); urun u = urunitems.get(position); urunresim.setimageurl(u.geturl(),imageloader); urun_adi.settext(u.geturun_adi()); return convertview; }
lrubitmapcache.java
public static int getdefaultlrucachesize() { final int maxmemory=(int)(runtime.getruntime().maxmemory()/1024); final int cachesize= maxmemory/8; return cachesize; } public lrubitmapcache() { this(getdefaultlrucachesize()); } public lrubitmapcache(int sizeinkilobytes) { super(sizeinkilobytes); } @override protected int sizeof(string key, bitmap value) { return value.getrowbytes() * value.getheight()/1024; } @override public bitmap getbitmap(string url) { return get(url); } @override public void putbitmap(string url, bitmap bitmap) { put(url,bitmap); }
your pictures(http://www.iremdeveci.com/ornekler/resimler/resim.png) seems cached correctly have etag , cache headers.
however first request make (http://sunumsitesi.com/json.php) doesn't seems return neither cache headers nor etag. have error dont reach picture part.
you can either fix server or make volley cache all, need create custom request , override
protected response<string> parsenetworkresponse(networkresponse response)
you can check answer here.
in code smth
jsonarrayrequest urunreq = new jsonarrayrequest(jsonurl, new response.listener<jsonarray>() { @override public void onresponse(jsonarray response) { string dosyakonum = "http://www.pukkaliving.concept.com/upload/galeri/buyuk/"; hidepdialog(); (int = 0; < response.length(); i++) { try { jsonobject obj = response.getjsonobject(i); urun urun = new urun(); urun.seturun_adi(obj.getstring("urun_adi")); urun.seturl("http://www.iremdeveci.com/ornekler/resimler/resim.png");//example urunlist.add(urun); } catch (jsonexception ex) { ex.printstacktrace(); } } adapter.notifydatasetchanged(); } }, new response.errorlistener() { @override public void onerrorresponse(volleyerror volleyerror) { toast.maketext(getactivity(), volleyerror.getmessage(), toast.length_long).show(); } }) { @override protected response<jsonarray> parsenetworkresponse(networkresponse response) { try { string jsonstring = new string(response.data, httpheaderparser.parsecharset(response.headers)); long = system.currenttimemillis(); cache.entry entry = httpheaderparser.parsecacheheaders(response); entry.ttl = + 30l * 24 * 60 * 60 * 1000; //keeps cache 30 days entry.softttl = + 1 * 24 * 60 * 60 * 1000; //will not try refresh 1 day return response.success(new jsonarray(jsonstring), entry); } catch (unsupportedencodingexception e) { return response.error(new parseerror(e)); } catch (jsonexception je) { return response.error(new parseerror(je)); } } }; appcontroller.getminstance().addtorequestqueue(urunreq);
however networkimage view have customize imageloader 1 creating image requests , logic same. have override "makeimagerequest".
ex:
... mimageloader = new imageloader(this.mrequestqueue, new lrubitmapcache()) { @override protected request<bitmap> makeimagerequest(string requesturl, int maxwidth, int maxheight, scaletype scaletype, final string cachekey) { return new imagerequest(requesturl, new listener<bitmap>() { @override public void onresponse(bitmap response) { ongetimagesuccess(cachekey, response); } }, maxwidth, maxheight, scaletype, config.rgb_565, new errorlistener() { @override public void onerrorresponse(volleyerror error) { ongetimageerror(cachekey, error); } }){ @override public response<bitmap> parsenetworkresponse(networkresponse response) { response<bitmap> resp = super.parsenetworkresponse(response); if(!resp.issuccess()) { return resp; } long = system.currenttimemillis(); cache.entry entry = resp.cacheentry; entry.ttl = + 30l * 24 * 60 * 60 * 1000; //keeps cache 30 days return response.success(resp.result, entry); } }; } }; ...
Comments
Post a Comment