我正在使用Rest
呼叫我无权访问的远程服务器。我想永久缓存接收到的数据以供脱机使用,而无需在标头中检查Last-Modified或ETag。
我期望CachingMode.MANUAL
机制检查是否存在脱机内容,如果没有,则联机以获取内容,但事实并非如此。
为了避免这种情况,我必须先将Rest
与CachingMode.OFFLINE
一起使用,如果返回404,然后再次使用CachingMode.SMART
进行调用。
是否不应该有一个选项(假设为CachingMode.OFFLINE_FIRST
)先检查离线,然后如果没有内容通过(CachingMode.SMART
)进入在线状态?
以下是我目前的方法:
Response<Map> response = Rest.get(url)
.cacheMode(CachingMode.OFFLINE)
.queryParam("param", value)
.jsonContent().onErrorCodeJSON(e -> {
throw new RuntimeException(createErrorMessage(e));
}).onError(e -> {
if (e.getResponseCode() == 0 || e.getConnectionRequest().getResponseCode() == 404) {
is404 = true;
return;
}
throw new RuntimeException("Network error. Please check your connection and try again.");
}).timeout(6000).getAsJsonMap();
if (is404) {
is404 = false;
response = Rest.get(url)
.cacheMode(CachingMode.SMART)
.queryParam("param", value)
.jsonContent().onErrorCodeJSON(e -> {
throw new RuntimeException(createErrorMessage(e));
}).onError(e -> {
throw new RuntimeException("Network error. Please check your connection and try again.");
}).timeout(6000).getAsJsonMap();
}
最佳答案
这很有道理。在此提交中添加了对此的支持:https://github.com/codenameone/CodenameOne/commit/fd81d979507fb08ee1d595b94df5973b322766a3