【问题标题】:Android Volley JsonObjectRequest returns same response every time on mobile dataAndroid Volley JsonObjectRequest 每次在移动数据上都返回相同的响应
【发布时间】:2015-09-30 09:16:43
【问题描述】:

我正在使用Volley JsonObjectRequest 从服务器获取数据。

代码sn-p:

JsonObjectRequest jsObjRequest = new JsonObjectRequest
        (Request.Method.GET, url, null, new Response.Listener<JSONObject>() {

    @Override
    public void onResponse(JSONObject response) {
        System.out.println("Response: " + response.toString());
    }
}, new Response.ErrorListener() {

    @Override
    public void onErrorResponse(VolleyError error) {
        // TODO Auto-generated method stub

    }
});

但我每次在移动数据连接上都得到相同的JSONObject response

注意:它在 WiFi 连接上完美运行。

有人遇到这个问题吗?有什么解决办法吗?

【问题讨论】:

  • 你能澄清一下吗?得到相同的响应不是预期的吗?您可以发布服务器网址或服务器代码以进行检查吗?或者你的意思是缓存的响应?
  • 是的,我已经用其他 HTTP Requester 客户端检查了该 url,这不是服务器问题。 Volley 每次仅在移动数据中返回旧响应。
  • 尝试调用 request.setShouldCache(false);检查它是否有效
  • 对我来说,它不适用于 setShouldCache(false)。新文件未加载,但旧文件在缓存中。
  • @TonyL 在将请求添加到队列之前,您是否添加了setShouldCache(false)

标签: android json android-volley jsonobjectrequest


【解决方案1】:

@BNK request.setShouldCache(false); 为我工作。这是凌空缓存管理的问题。

我假设在发送请求时:

  • 它会首先访问缓存并将其发送到onResponse

  • 然后当结果来自远程服务器时,它会将其提供给onResponse

如果您使用任何在 volley 中实现的默认请求类(例如 StringRequest、JsonRequest 等),则在将请求对象添加到 volley 之前调用 setShouldCache(false)RequestQueue

request.setShouldCache(false);
myQueue.add(request);

您还可以为缓存设置过期策略

See this answer for more details

【讨论】:

  • 我觉得你应该设置小softExpire,请阅读my answer here
  • 你又救了我一天。
  • 你救了我的命。谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多