Что вызывает ErrorListener, зарегистрированный в запросе залпа, чтобы быть вызванным? - PullRequest
0 голосов
/ 09 октября 2018

На этой странице сказано, что мы можем зарегистрировать прослушиватель для запроса залпа для обработки ошибок: https://developer.android.com/training/volley/simple

Но в нем не указано, какие ошибки вызывают этот прослушиватель.Volley javadoc также ничего не говорит об этом.

В частности, будет ли выполняться этот слушатель, если произойдет ошибка сети.Я спрашиваю об этом, потому что я столкнулся с кодом Android следующей формы:

 private void method() {
    String URL = "";
    final int[] status_code = new int[1];
    StringRequest request = new StringRequest(Request.Method.POST, URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    if (status_code[0] == 200) {
                        // do something
                    } else {
                        // display toast
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    // display toast
                }
            }) {
        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
            status_code[0] = response.statusCode;
            return super.parseNetworkResponse(response);
        }
    };
    // add request to queue
}

Этот код, кажется, предполагает, что зарегистрированный ErrorListener не вызывается для сетевых ошибок.

Каковы условия, при которых ErrorListener, зарегистрированный для запроса Volley, будет называться

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

ErrorListener запускается для 4xx ответов и 5xx ответов. Я не могу сказать, что произойдет, хотя для ответов 3xx перенаправления, поскольку это не произошло со мной.

Вотсписок со всеми кодами ответов HTTP: https://www.restapitutorial.com/httpstatuscodes.html

0 голосов
/ 17 октября 2018

Я просто называю это утверждение

@Override
public void onErrorResponse(VolleyError error) {
    if (error instanceof TimeoutError) {
       Log.i(TAG, "onErrorResponse: " + context.getString(R.string.error_network_timeout));
    } else if (error instanceof ServerError) {
      Log.i(TAG, "onErrorResponse: " + context.getString(R.string.error_server));
    } else if (error instanceof NetworkError) {
       //toast or log your error
    } else if (error instanceof ParseError) {
      Log.i(TAG, "onErrorResponse: " + context.getString(R.string.parse_error));
    } else {
      Log.i(TAG, "onErrorResponse: Something went wrong ");
  }

Вам не нужно искать код ошибки

0 голосов
/ 12 октября 2018

Я не совсем знаком со всем вашим кодом, но копаюсь в исходном коде Volley:

  1. Response.java принимает VolleyError object
  2. VolleyError ссылается на NetworkResponses в его использовании.
  3. Проверка NetworkResponses имеет дело в основном с кодами состояния HTTP.
  4. Также я бы отметил, что VolleyError расширяет Exception.

Так что я бы сказал, что метод обратного вызова срабатывает, когда генерируется Exception и VolleyError имеет дело с кодами состояния HTTP.

...