2013-11-02 49 views
12

我決定開始使用Android 4.4測試我的應用程序,並注意到Android HTTP連接API比以前嚴格得多?我從來沒有這個問題,我認爲這是一種錯誤。Android 4.4 HTTP API錯誤?

我連接到SHOUTcast廣播包含特定的冰冷頭響應。

有沒有人看過這個問題?我怎樣才能解決它?

URL用於該測試:

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.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):在 com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:135) 11-01 23:47:57.299:E/ConnectHelper(3081):在 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.java:347) 11-01 23:47:57.299:E/ConnectHelper(3081)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)

+0

通知了'okhttp'那裏。 AFAIK HttpURLConnection的實現已經被Kitkat的Square的OkHTTP所取代。 – laalto

+0

是的,我認爲引擎蓋下的東西發生了變化。這太臭了。我真的需要找出解決辦法。任何建議? – Jona

回答

6

在Android 4.4上,事情確實發生了變化,沒有標準SHOUTc不再支持ICY頭部響應。就像Apache HTTPClient庫一樣。

我不得不這樣做可以在這個帖子中找到:
How to parse a none standard HTTP response?

+0

我還添加了解決方案,用Apache HttpClient解決這個問題。希望這可以幫助。 –

0

Jona的答案是正確的,但如果你正在使用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)不鼓勵,所以答案應該是搜索解決方案的終點(vs.而另一個引用的中途停留時間往往會隨着時間推移而過時)。請考慮在此添加獨立的摘要,並將鏈接保留爲參考。 – kleopatra

0

我已經實現了一個基於Apache HttpClient的解決方案,你可以找到它a gist here

這裏是如何使用它:

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