2013-11-02 5 views
12

Я решил начать тестирование своего приложения с Android 4.4 и заметил, что API-интерфейсы HTTP HTTP гораздо более строгие, чем раньше? У меня никогда не было этой проблемы, и я предполагаю, что это какая-то ошибка.Android 4.4 http api bugs?

Я подключаюсь к трансляциям SHOUTcast, которые содержат конкретный ледяной ответ заголовка.

Кто-нибудь видел эту проблему? Как я могу обойти это?

URL-адрес используется для этого теста:

http://50.117.121.162:80 

Logcat исключения:

11-01 23: 47: 57,299: Е/ConnectHelper (3081): java.net .ProtocolException: Неожиданная строка состояния: ICY 200 OK 11-01 23: 47: 57.299: E/ConnectHelper (3081): at com.android.okhttp.internal.http.RawHeaders.setStatusLine (RawHeaders.ja va: 108) 11-01 23: 47: 57.299: E/ConnectHelper (3081): at com.android.okhttp.internal.http.RawHeaders.fromBytes (RawHeaders.java:308) 11-01 23:47 : 57.299: E/ConnectHelper (3081): at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders (HttpTransport.java:135) 11-01 23: 47: 57.299: E/ConnectHelper (3081): at com.android.okhttp.internal.http.HttpEngine.readResponse (HttpEngine.java:644) 11-01 23: 47: 57.299: E/ConnectHelper (3081): at com.android.okhttp.internal.http. HttpURLConnectionImpl.execute (HttpURLConnectionImpl.java:347) 11-01 23: 47: 57.299: E/ConnectHelper (3081): at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse (HttpURLConnectionImpl.java:296) 11-01 23: 47: 57.299: E/ConnectHelper (3081): at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode (HttpURLConnectionImpl.java:503) 11-01 23: 47: 57.299: E/ConnectHelper (3081): на com.vblast.xiialive.media.stream.ConnectHelper.connectWorker (ConnectHelper.java:176) 11-01 23: 47: 57.299: E/ConnectHelper (3081): at com.vblast .xiialive.media.streamers.ConnectHelper.run (ConnectHelper.java:143) 11-01 23: 47: 57.299: E/ConnectHelper (3081): at java.lang.Thread.run (Thread.java:841)

+0

Обратите внимание на 'okhttp' там. Внедрение AFAIK HttpURLConnection было заменено OkHTTP Square в Киткате. – laalto

+0

Да, я думал, что что-то изменилось под капотом. Это воняет. Мне действительно нужно разобраться в этом. Любые рекомендации? – Jona

ответ

6

В Android 4.4 все изменилось под капотом, и ни один стандарт SHOUTc Ответ заголовка ICY заголовка больше не поддерживается. Также как библиотека Apache HTTPClient.

То, что я должен был сделать, можно найти на этом посту:
How to parse a none standard HTTP response?

+0

Я также добавил там решение, которое решает это с помощью Apache HttpClient. Надеюсь это поможет. –

0

Йона ответ правильный, но если вы используете AACPlayer (https://code.google.com/p/aacplayer-android/), чтобы играть свою SHOUTcast, вот простое решение: https://code.google.com/p/aacdecoder-android/wiki/HandlingShoutcastStreams

Кроме того, мне нужно, чтобы изменить свой адрес от «http://example.org» до «ледяная: //example.org»

+1

Обратите внимание, что [ссылки только для ответов] (http://meta.stackoverflow.com/tags/link-only-answers/info) обескуражены, ответы SO должны быть конечной точкой поиска решения (vs. еще одна остановка ссылок, которые со временем становятся устаревшими). Пожалуйста, подумайте о добавлении отдельного резюме здесь, сохранив ссылку в качестве ссылки. – kleopatra

0

Я реализованного решение, основанное на Apache HttpClient, вы можете найти его как a gist here.

Вот как его использовать:

IcyGetRequest request = new IcyGetRequest(urlStr); 
HttpResponse response = request.get(); 
int responseCode = response.getStatusLine().getStatusCode();