java - volley json cache image doesn't work offline -


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