Как бороться с неожиданным откликом 500 в Android - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь получить JSON из внешнего API, используя Volley. Вот мой код

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    final TextView mTextView = findViewById(R.id.testreq);
    RequestQueue queue = Volley.newRequestQueue(this);
    String url = "https://horoscope-free-api.herokuapp.com/?time=today&sign=cancer";
    StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    // Display the first 500 characters of the response string.
                    mTextView.setText("Response is: "+ response.substring(0,500));
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            mTextView.setText("That didn't work");
            Log.d("Error", error.toString());
        }
    });
    queue.add(stringRequest);
}

Кажется, что ответ сделан, но я получаю эту ошибку

E / Volley: [277] BasicNetwork.performRequest: неожиданный код ответа 500 и когда я запустил тест на API в https://apitester.com/ Он говорит мне, что он пройден, и я получаю эту ошибку

заголовки ответа HTTP / 1.1 500 Внутренняя ошибка сервера Подключение: keep-alive Дата: сб, 10 ноября 2018 19:56:18 GMT Сервер: Apache Передача-кодировка: чанки Тип контента: приложение / JSON Через: 1.1 Вегур

Есть идеи, как это решить? Это API или я?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Я обнаружил, что ошибка в используемом вами API отправляет код ответа 500 + Данные ответа. И в случае залпа всякий раз, когда обнаруживается код ответа, отличный от 200 до 299, он запускает там прослушиватели ошибок, чтобы обработать его. Вот почему ваш код пропустил ваши данные ответа, потому что слушатель ошибок Volley получает Call First.

Почтальон Изображение с двумя точками

Откровенно говоря, это Нестандартный Плохой Способ Проектирования API, который также генерирует код состояния в Ответах.

Слишком я хочу тебе сказать:

  1. Начните использовать Почтальон (если вы его не используете)

  2. Библиотека Джамуна Волли

начните использовать вспомогательные библиотеки. Это то, что я рекомендую вам использовать, чтобы обрабатывать большинство вызовов методов и обеспечивать лучшую обработку ошибок с помощью пользовательских сообщений и индивидуальных кодов состояния.

Надеюсь, это поможет вам решить будущие подходы.

0 голосов
/ 11 ноября 2018

Коды состояния HTTP, начинающиеся с 5 , сообщают, что ошибка на стороне сервера. Код 500 интерпретируется как Внутренняя ошибка сервера , чтобы решить эту проблему, необходимо проверить, что может вызвать его. Это может быть вызвано ошибкой в ​​коде, в этом случае вы можете открыть свой error_log, чтобы увидеть ошибку и действовать соответственно.

Это может быть вызвано тем, что серверные функции на мгновение недоступны, такие как доступ к базе данных или наличие множества одновременно открытых соединений, которые превышают связанные ресурсы mysql.

В некоторых других случаях ошибка не регистрируется в файле error_log. Если вы используете cpanel, на домашней странице в разделе Metrics откройте вкладку Ошибки и проверьте в соответствии с временем, которое вы запросили на сервере. Если вы не используете cpanel, найдите соответствующий журнал сервера.

Если в вашем вопросе передана ссылка, кода ошибки не должно быть, если он не перезаписан или не задан жестко в сценарии на стороне сервера.

См. Эти три теста:

enter image description here

С этим я установил и время, и параметры рака, и, как вы можете видеть, код ошибки равен 500, но в теле ответа все в порядке со статусом 200.

enter image description here

И с этим у меня все еще есть ответ, даже если я только установил один параметр. в теле ответа есть ошибка не ошибка сервера, а настроенная ошибка: отсутствует параметр. Угадайте, что вернул HTTP-код (500)

А что если я уберу все параметры?

enter image description here

Все в порядке. Код состояния HTTP и тело ответа. Это говорит мне о том, что если автор хочет, чтобы вы слушали настроенный запрос status, а не возвращенный код состояния HTTP. Это только моя точка зрения.

...