Залп не запрашивает новый запрос после того, как вручную измените время, пока приложение открыто - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть приложение для Android, которое вызывает веб-сервисы, используя Volley.Если мое приложение открывается, и я вручную изменяю время (назад или вперед), Volley не вызывает новые запросы, и ответ, который уже находится в кеше, возвращается.Если я очищу кеш и данные, только тогда сработает новый запрос и появится новый ответ.Как запросы на залп связаны с системным временем и почему это происходит?Есть ли какое-то решение для этого?

StringRequest stringRequest = new StringRequest(Request.Method.POST, new ServiceUtils().url,
    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
           // Log.d(TAG, "onResponse: response " + response);
        }
    }, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
       //Log.d(TAG, "onErrorResponse: " + error);
    }
    }) {
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        HashMap<String, String> nameValuePairs = new HashMap<String, String>();
        nameValuePairs.put("parm1", parm1);
        nameValuePairs.put("parm2", parm2);
        nameValuePairs.put("parm3", parm3);
        return nameValuePairs;
    }
};

addToRequestQueue(stringRequest, "", getApplicationContext());

1 Ответ

0 голосов
/ 14 февраля 2019

Volley кэширует любой запрос автоматически, и чтобы преодолеть эту ситуацию, вам нужно установить атрибут setShouldCache на false.

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

Вот полный запрос, скопированный из выпуска Github .

RequestQueue queue = Volley.newRequestQueue(context);
queue.getCache().clear();
StringRequest myReq = new StringRequest(Request.Method.POST,
        VolleyConnector.url,
        createMyReqSuccessListener(),
        createMyReqErrorListener()) {

    protected Map<String, String> getParams() throws com.android.volley.AuthFailureError {
        Map<String, String> params = new HashMap<String, String>();
        params.put("Cn","1");
        params.put("Yr","1396");
        params.put("MaxInPage","10");
        params.put("Method","Control_Vaziat_View");
        params.put("Pg","1");
        return params;
    };
};
myReq.setShouldCache(false);
queue.add(myReq);

Надеюсь, это поможет!

...