gpt4 book ai didi

Android RoboSpice 缓存管理和离线模式

转载 作者:行者123 更新时间:2023-11-29 20:54:51 26 4
gpt4 key购买 nike

我计划使用 RoboSpice + OrmLite 进行数据缓存,我希望我的应用程序可以离线工作并使用缓存的数据。我是 RoboSpice 的新手。

我想实现以下案例:如果用户有互联网连接,则每次从服务器请求数据(因为它可以更改)并缓存在数据库中如果用户没有互联网连接,数据应该从数据库中获取并且永不过期。

getSpiceManager().execute(weatherRequest, new Integer(0), DurationInMillis.ALWAYS_RETURNED, new WeatherRequestListener());

如果我理解正确,DurationInMillis.ALWAYS_RETURNED 意味着数据将被加载一次,其他时间从缓存中加载。是否有任何选项可以实现所描述的场景?

我看到类似 NetworkStateChecker 的东西,它可以在 SpiceService 中被覆盖。也许这是正确的方向。

最佳答案

您可以尝试使用 SpiceManager#getFromCacheAndLoadFromNetworkIfExpired。来自 javadoc:

Gets data from cache, expired or not, and executes a request normaly. Before invoking the method SpiceRequest.loadDataFromNetwork(), the cache will be checked : if a result has been cached with the cache key requestCacheKey, RoboSpice will consider the parameter cacheExpiryDuration to determine whether the result in the cache is expired or not. If it is not expired, then listeners will receive the data in cache only. If the result is absent or expired, then SpiceRequest.loadDataFromNetwork() will be invoked and the result will be stored in cache using the cache key requestCacheKey.

它并没有完全解释它,但是当缓存过期时你仍然会从那里得到一个结果。然后,如果您使用了 DurationInMillis.ALWAYS_EXPIRED,每次都会从网络刷新缓存。因此,您将只能在额外请求中从网络获取新数据。

另一种方法是实现 RequestListener#onRequestFailure,使用 SpiceManager#getDataFromCache 从缓存中加载数据。请注意,在这种情况下,您可能希望实现自定义 com.octo.android.robospice.retry.RetryPolicy

最后,NetworkStateChecker 在了解互联网连接是否实际工作方面并不可靠,因此在这两种情况下,您最好的选择是在每次需要数据时尝试执行请求.

关于Android RoboSpice 缓存管理和离线模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28051740/

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