我的下面示例代码工作正常,没有任何问题,此示例代码可以缓存来自url的接收数据,并在设备没有任何互联网连接时使用它。
但是这个代码有一个很大的缺陷,就是当设备有互联网连接时我无法重新安排并从互联网获取最新数据并再次重新缓存,直到设备没有连接,一些数据可以是image
或{{1} }或json array
json object
答案 0 :(得分:0)
它只会缓存一次因为在创建应用程序后调用onCreate方法..
最合适的解决方案是:
您需要使用服务,例如,每5分钟使用 AlarmManager 来触发自己。在此服务中,您可以在后台缓存最新数据,当然对于较小的时间单位,将消耗更多的电池。
更新缓存大小调整
RequestQueue volleyQueue = Volley.newRequestQueue(this);
DiskBasedCache cache = new DiskBasedCache(getCacheDir(), 16 * 1024 * 1024);
volleyQueue = new RequestQueue(cache, new BasicNetwork(new HurlStack()));
volleyQueue.start();
根据that讨论,可以操纵volley的缓存,但是当它被填满时,会自动用旧的数据替换新数据,因此,缓存大小现在不是焦点。
更新缓存清理
根据google volley的Cache类的官方link,mahdi有一个名为invalidate()的方法,它使缓存的数据无效,下次volley检查数据是否有效并更新它根据this讨论,您可以每隔30分钟删除一次缓存:
serverDate:AppController.getInstance().getRequestQueue().getCache().get(url).serverDate
getMinutesDifference是方法计算时间,可以在参考链接上找到。
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, true);
}
答案 1 :(得分:0)
您可以先检查您的Internet连接,如果您有连接,则可以清除缓存并重新加载
ConnectivityManager connMgr = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
MySocialMediaSingleton.getInstance(getContext()).getRequestQueue().getCache().invalidate("http://server/json.php?page=1", true);
}
//Calling again method to get data to fetch data
getData();