Android:Volley 1.0.18如何禁用请求缓存?

时间:2016-01-14 14:34:02

标签: android rest caching android-volley

我正在使用排球库:

compile 'com.mcxiaoke.volley:library:1.0.18'

在http helper类中,我有以下方法。

  public static JsonRequest createRequest(String responseType, int requestMethod, String scheme,
                                            String url, final String requestParams, final HttpResponseListener listener,
                                            Request.Priority priority) throws UnsupportedEncodingException {
        // Start to prepare request URL
        Uri.Builder builder = new Uri.Builder();
        builder.scheme(scheme).encodedAuthority(url);
        // GET REQUESTS - append the params into URL
        if (requestMethod == Request.Method.GET && requestParams != null) {
            boolean append = appendParamsToUrl(requestParams, builder);
            if(!append) return null;
        }
        url = URLDecoder.decode(builder.build().toString(), Constants.Request.DEFAULT_ENCODING);
        // Get response as JSON object
        JsonRequest request;
        if (responseType.equals(Constants.Request.JSON_OBJECT)) {
            // Prepare request and set the Callbacks
            request = new CustomJsonObjectRequest(requestMethod, url, requestParams,
                    priority, responseListener(listener), errorListener(listener), listener);
        }else { // Get response as JSON array of objects
            // Prepare request and set the Callbacks
            request = new CustomJsonArrayRequest(requestMethod, url, requestParams,
                    priority, responseArrayListener(listener), errorListener(listener), listener);
        }
        request.setTag(REQUEST_TAG);
        request.setShouldCache(false);
        return request;
    }

当我使用选项时:

request.setShouldCache(false);

强制禁用缓存。

但是当我从POSTMAN(用于API测试的Chrome扩展程序)获得服务器的响应时,我得到的响应值不同于Android设备。

我也尝试过使用:

queue.getCache().clear();

但结果相同。

如何强制禁止缓存响应?

非常感谢任何建议。

3 个答案:

答案 0 :(得分:1)

request.setShouldCache(false);
对于GET请求,

似乎不够。 但是,在添加到队列之前清除缓存似乎有帮助

myRequestQueue.getCache().clear();

我在退回getRequestQueue()之前将其放入我的Volley单身人士的requestQueue方法中。

答案 1 :(得分:1)

请致电以下人员:

myRequestQueue.getCache().remove(url);

答案 2 :(得分:0)

要使用没有响应缓存的Volley,而不是使用Volley.newRequestQueue(),您可以按如下方式创建自己的RequestQueue:

   HttpStack stack;
   if (Build.VERSION.SDK_INT >= 9) {
        stack = new HurlStack();
   } else {
        stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent));
   }

   Network network = new BasicNetwork(stack);
   queue = new RequestQueue(new NoCache(), network);

关键是NoCache对象,它实现了Volley Cache接口但什么也没做。

奖励:如果需要,您还可以使用OkHttp(随应用附带)实施HttpStack。这种方法的好处在于,既然您使用应用程序发布了OkHttp库,那么您可以放心,您的HttpStack实现将始终适用于所有Android版本,因为您不依赖于平台的HttpStack实现。另外OkHttp有各种各样的好东西,比如拦截机制和一个非常简单的API。