Запрос на повторную попытку залпа

В настоящее время я тестирую библиотеку volley. Но когда запрос терпит неудачу (404), он не выполняется снова или, по крайней мере, ошибок нет. Однако данные отсутствуют. Это правильный способ повторить запрос, если он не удался?

заранее спасибо

req.setRetryPolicy(new DefaultRetryPolicy(5000,1,1.0f));
queue.add(req);

Использование :

JsonObjectRequest req = null;
        for(int i=0;i<profielen.size();i++){
            final int pos = i;
             req = new JsonObjectRequest(Request.Method.GET, imageLocUrl, null, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                        try {
                            setImageOnProfile(pos,response.get("thumbnail").toString());
                        } catch (JSONException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }


            }}, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                }
            });

            req.setRetryPolicy(new DefaultRetryPolicy(5000,1,1.0f));
            queue.add(req);
        }

person David    schedule 17.02.2014    source источник


Ответы (1)


Нет, это не правильный путь.

В стороне:

  • HTTP 404 не является кодом состояния, я ожидаю, что HTTP-клиент с нормальным поведением в нормальных условиях повторит попытку.

  • Скорее всего, вы получаете сообщение об ошибке через прослушиватель ошибок, который вы предоставляете запросу, но ваш прослушиватель ошибок является NOOP, поэтому, возможно, вы этого не замечаете?

  • (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html имеет нормальное описание значений кода состояния.)

  • Политика повтора запроса применяется только к сбоям из-за: тайм-аутов открытия сокета, тайм-аутов открытия сокета, HTTP 401 и HTTP 403. Все остальные сбои не повторяются автоматически, насколько я знаю.

Я думаю, что для повторной попытки 404 с помощью Volley вам нужно повторить попытку вручную в onErrorResponse.

(Фикус: было бы неплохо, если бы RetryPolicy обращались за кодами состояния ошибки. Я хотел бы иметь возможность установить политику, которая повторяет попытки на 503-х.)

person nmr    schedule 13.05.2014