齐射json缓存图像无法离线工作

齐射json缓存图像无法离线工作,第1张

齐射json缓存图像无法离线工作

您的图片(http://www.iremdeveci.com/ornekler/resimler/resim.png)似乎已正确缓存,因为具有etag和cache标头。

但是,您发出的第一个请求(http://sunumsitesi.com/json.php)似乎既不返回缓存头也不返回etag。因此,您有错误甚至没有到达图片部分。

您可以从服务器修复该问题,也可以让Volley缓存所有这些,您需要为其创建自定义请求并覆盖

protected Response<String> parseNetworkResponse(NetworkResponse response)

在您的代码中,这就像

        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(); for (int i = 0; i < 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 now = System.currentTimeMillis();     Cache.Entry entry = HttpHeaderParser.parseCacheHeaders(response);     entry.ttl = now + 30l * 24 * 60 * 60 * 1000;  //keeps cache for 30 daysentry.softTtl = now + 1 * 24 * 60 * 60 * 1000;  //will not try to refresh for 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);

但是对于NetworkImage视图,您必须自定义ImageLoader,因为这是创建图像请求的对象,然后逻辑是相同的。您必须覆盖“
makeImageRequest”。

例如:

  ...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 now = System.currentTimeMillis();  Cache.Entry entry = resp.cacheEntry;  entry.ttl = now + 30l * 24 * 60 * 60 * 1000;  //keeps cache for 30 days  return Response.success(resp.result, entry);         }        }; }};    ...


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5430531.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存