我正在使用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就会处理其余的语句。