我正在使用Rest呼叫我无权访问的远程服务器。我想永久缓存接收到的数据以供脱机使用,而无需在标头中检查Last-Modified或ETag。
我期望CachingMode.MANUAL机制检查是否存在脱机内容,如果没有,则联机以获取内容,但事实并非如此。
为了避免这种情况,我必须先将RestCachingMode.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

09-04 06:33