我找不到更新的答案。我正在向Volley发送请求到Web API。它返回JSON。我正在使用如下所示的缓存功能,但我想确保listview每隔一段时间刷新一次(比如现在说30分钟)。如何使此给定URL的缓存无效以使我的应用程序自动处理(无需刷新按钮)。这个question有助于指出invalidate和remove之间的区别。
MainActivity.java
Cache cache = AppController.getInstance().getRequestQueue().getCache();
Entry entry = cache.get(URL_FEED);
if (entry != null) {
// fetch the data from cache
try {
String data = new String(entry.data, "UTF-8");
try {
parseJsonFeed(new JSONArray(data));
} catch (JSONException e) {
e.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
} else
{
// making fresh volley request and getting json
JsonArrayRequest getRequest = new JsonArrayRequest(URL_FEED,
new Response.Listener<JSONArray>()
{
@Override public void onResponse(JSONArray response) {
VolleyLog.d(TAG, "Response: " + response.toString());
if (response != null) {
parseJsonFeed(response);
}
Log.d("Response", response.toString());
}
},......ErrorListener
答案 0 :(得分:4)
要刷新列表视图,您可以使用volley的 serverDate 来获取最初收到回复的日期
AppController.getInstance().getRequestQueue().getCache().get(url).serverDate
此返回日期时间长。 在您的代码中使用minutedifference函数
public static long getMinutesDifference(long timeStart,long timeStop){
long diff = timeStop - timeStart;
long diffMinutes = diff / (60 * 1000);
return diffMinutes;
}
并在代码中调用此函数
Calendar calendar = Calendar.getInstance();
long serverDate = AppController.getInstance().getRequestQueue().getCache().get(url).serverDate;
if(getMinutesDifference(serverDate, calendar.getTimeInMillis()) >=30){
AppController.getInstance().getRequestQueue().getCache().invalidate(URL_FEED, true);
}
如果之前的网址响应&gt; = 30分钟,它将使缓存无效。
此(无效)允许继续使用此数据,直到进行新的调用并使用新响应覆盖缓存的响应。