Android 4.4 http api错误?

时间:2013-11-02 03:56:22

标签: android android-4.4-kitkat

我决定开始使用Android 4.4测试我的应用,并注意到Android HTTP连接API比以前更加严格?我从来没有遇到过这个问题,我认为这是某种类型的错误。

我正在连接包含特定icy标头响应的SHOUTcast广播。

有没有人见过这个问题?我怎么能绕过它?

此测试使用的网址

http://50.117.121.162:80

异常的Logcat:

  

11-01 23:47:57.299:E / 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.java: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):at   com.vblast.xiialive.media.streamers.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)

3 个答案:

答案 0 :(得分:6)

在Android 4.4上,事情确实发生了变化,不再支持无标准的SHOUTcast ICY标头响应。就像Apache HTTPClient库一样。

我可以在这篇文章中找到我要做的事情:
How to parse a none standard HTTP response?

答案 1 :(得分:0)

Jona回答是对的,但是如果您使用AACPlayer(https://code.google.com/p/aacplayer-android/)来播放SHOUTcast,这是一个更简单的解决方案:https://code.google.com/p/aacdecoder-android/wiki/HandlingShoutcastStreams

另外,我需要将我的网址从“http://example.org”更改为“icy://example.org”

答案 2 :(得分:0)

我已经实施了基于Apache HttpClient的解决方案,您可以将其找到a gist here

以下是如何使用它:

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