1

我正在使用 Volley 进行请求,我需要缓存我的 json 值。我读了这个链接,我做到了,但有一个问题。

我有一个 listView 项目是 item1 和 item2。当我单击 item1 时,它会缓存 json,当我单击 item2 时,它会从缓存中返回。结果是它只显示 item1 值。我应该在这里更改什么以便缓存正确。

public static Cache.Entry parseIgnoreCacheHeaders(NetworkResponse response) {
        long now = System.currentTimeMillis();

        Map<String, String> headers = response.headers;
        long serverDate = 0;
        String serverEtag = null;
        String headerValue;

        headerValue = headers.get("Date");
        if (headerValue != null) {
            serverDate = parseDateAsEpoch(headerValue);
        }

        serverEtag = headers.get("ETag");

        final long cacheHitButRefreshed = 3 * 60 * 1000; // in 3 minutes cache will be hit, but also refreshed on background
        final long cacheExpired = 24 * 60 * 60 * 1000; // in 24 hours this cache entry expires completely
        final long softExpire = now + cacheHitButRefreshed;
        final long ttl = now + cacheExpired;

        Cache.Entry entry = new Cache.Entry();
        entry.data = response.data;
        entry.etag = serverEtag;
        entry.softTtl = softExpire;
        entry.ttl = ttl;
        entry.serverDate = serverDate;
        entry.responseHeaders = headers;

        return entry;
    }
4

1 回答 1

0

缓存非常适合使用 VolleyExtended:eu.the4thfloor.volleyextended 更新了响应侦听器,您可以在其中更改其他布尔值,这意味着如果响应与缓存中的最后一个响应不同。在错误响应中,还有额外的参数响应(缓存),您可以在服务器或网络中断的情况下使用。当然,如果它只是缓存。当然,缓存取决于从服务器发送的 max-age 参数。但是您可以根据需要在 volley 中更新它

private class ResponseListenerYYY extends Api.ResponseListener {
@Override
public void onResponse(String response, boolean changed) {

}

@Override
public void onErrorResponse(VolleyError error, String response) {


}

}

于 2014-02-06T11:47:03.060 回答