gpt4 book ai didi

Android Volley,使缓存无效并每(x)分钟发出一次新请求

转载 作者:太空宇宙 更新时间:2023-11-03 13:23:11 25 4
gpt4 key购买 nike

我找不到对此的更新答案。我正在使用 Volley 向 Web API 发送请求。它返回 JSON。我正在使用如下的缓存功能,但我想确保 ListView 经常刷新(现在假设 30 分钟)。我怎样才能使这个给定 URL 的缓存无效,让我的应用程序自动处理它(没有刷新按钮)。这question有助于指出无效和删除之间的区别。

主要 Activity .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

最佳答案

要刷新 ListView ,您可以使用 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);
}

如果之前的 url 响应 >=30 分钟,它将使缓存失效。

此(无效)允许继续使用此数据,直到进行新调用并且缓存的响应被新响应覆盖。

关于Android Volley,使缓存无效并每(x)分钟发出一次新请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24495055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com