我正在使用Volley库访问我的服务器数据。Volley具有内置的缓存功能。我尝试按以下方式使用该功能。但我不知道如何访问缓存的数据。

 void initHttpCall(){

    RequestQueue queue = Volley.newRequestQueue(mcontext);

    UOBRequest<RateData> myReq = new UOBRequest<RateData>(Method.GET,
                                            Constants.GET_RATES,
                                            RateData.class,
                                            mlistner,
                                            createMyReqErrorListener()){


                            @Override
                            public Map<String, String> getHeaders(){

                            HashMap<String, String> headers = new HashMap<String, String>();
                            headers.put("Authorization", getToken());
                            headers.put("Accept","application/json" );

                            return headers;

                            }



    };

    myReq.setShouldCache(true);
    if(queue.getCache().get(Constants.GET_RATES)!=null){

        System.out.println("CACHED RESPONSE");

        }else{

             queue.add(myReq);
        }


}


}

这是我的响应列表器,想在这里获取RateData对象。

new Response.Listener<RateData>() {



    @Override
    public void onResponse(RateData rateData) {

        setupCurrencyPager(rateData);
        setLastUpdatedTime();

    }
});

最佳答案

您误解了Volley的缓存系统的工作方式。它的优点在于,作为Volley的用户,您不知道响应来自何处。

当您向RequestQueue添加新请求时,Volley会检查该请求是否已经具有缓存的响应。如果是这样,并且该响应尚未过期,则会立即返回。否则,它将进入网络之外,检索响应,将其缓存并返回给您。

您不需要最后一个if语句,只需将其添加到队列中,Volley就会处理其余的语句。

10-07 19:23
查看更多