Как получить код состояния Http из NoHttpResponseException в Android?

В Android у меня есть HttpClient, который выполняет GET для веб-сервиса. Веб-сервис может вернуть ошибку Http 429 (слишком много запросов) с подробным объектом JSON об ошибке, содержащим некоторые дополнительные данные (например, время в будущем, когда запрос может быть повторно отправлен повторно).

К сожалению,

response = httpclient.execute(httpGet, localContext);

вызовите исключение NoHttpResponseException, и объект ответа останется NULL.

Так что у меня нет шансов справиться с этой конкретной ошибкой 429.

Есть ли решение?

Обновление: я проверил с помощью fiddler, что когда сервер возвращает правильный объект JSON с кодом состояния HTTP = 429, httpclient.execute(httpGet, localContext); просто выбросьте NoHttpResponseException - так что проблема не в том, что сервер не возвращает никакого результата.


person Alex    schedule 10.10.2012    source источник
comment
nohttpresponse обычно указывает на отсутствие ответа http, следовательно, нет кода.   -  person njzk2    schedule 10.10.2012
comment
@njzk2 njzk2 Я проверил с помощью Fiddler, что, когда сервер возвращает правильный объект JSON с кодом состояния HTTP = 429, httpclient.execute(httpGet, localContext); просто выбросьте NoHttpResponseException - так что проблема не в том, что сервер не возвращает никакого результата.   -  person Alex    schedule 10.10.2012


Ответы (1)


Вы имеете в виду что-то вроде этого?

WebRequestResult result = new WebRequestResult();
URL url = new URL(this.url);
URLConnection connection = url.openConnection();
HttpURLConnection  httpConnection = (HttpURLConnection) connection;
//This here?
result.setStatusCode(httpConnection.getResponseCode());
result.setStatusDescription(httpConnection.getResponseMessage());
person Mr.S    schedule 10.10.2012
comment
Нет, вы не поняли. Мой сервер возвращает правильный объект JSON с кодом состояния http 429, в клиентском приложении Android ошибка http угрожает как NoHttpResponseException... - person Alex; 10.10.2012
comment
на самом деле, может быть что-то здесь. это другой http-клиент, и он может иметь другую обработку экзотических кодов (например, 429) - person njzk2; 10.10.2012
comment
@ Алекс, возможно, вы правы в том, что это решение вам не подходит ... вы можете использовать это, только если используете gson. и с gson вы можете обрабатывать другой код состояния. и я бы также рекомендовал вам использовать gson. это намного проще и легче, чем оригинальные JSONObjects и другие. - person Mr.S; 10.10.2012
comment
@Mr.S На самом деле я уже использую GSON (если вы имеете в виду это: code.google.com/ p/google-gson) я использую JSON для преобразования результата JSON в объекты Java... но я не могу понять, как это может решить мою проблему. Вы предлагаете мне заставить сервер когда-либо возвращать объект JSON с HTTP-статусом 200 даже тогда, когда он должен возвращать ошибку? - person Alex; 10.10.2012
comment
@Alex Нет, сервер может вернуть объект json со статусом 429, но приложение может обработать его с помощью кода ответа (в вашем случае 429) и не всегда будет давать вам исключение NoHttpResponseException. Если вы дадите мне свой адрес электронной почты, я могу отправить вам небольшой тестовый проект, в котором эта обработка должна быть решена! - person Mr.S; 10.10.2012
comment
@Mr.S, как я могу отправить вам свой адрес электронной почты, не написав его здесь публично? кажется StackEx. сеть никогда не будет реализовывать функцию прямого контакта с пользователями. - person Alex; 10.10.2012
comment
@ Алекс, это хороший момент ... но я думаю, что люди здесь, в stackoverflow, достаточно серьезны, поэтому они не будут просто писать вам без какой-либо причины (также называемой спамом ;-)) - person Mr.S; 11.10.2012
comment
@Mr.S ммм, проблема в спамерах, а не в пользователях этой сети. Ну, попробуйте отправить мне что-нибудь сюда: [email protected] это временное электронное письмо, которое будет длиться 60 минут с 9:16 утра по всемирному координированному времени. - person Alex; 11.10.2012