Mam problem, gdy mój HttpsURLConnection rzuci EOFException, gdy próbuję odczytać dowolne wejście. Kod działa dla niektórych połączeń sieciowych, ale kończy się niepowodzeniem na innych. Jeśli spróbuję odczytać cokolwiek z połączenia, nie powiedzie się z wyżej wymienionym błędem.Android HttpsUrlConnection eofexception
Przykład:
urlConnect.getResponseCode() // will throw error
urlConnect.getResponseMessage() // will throw error
BufferedInputStream in = new BufferedInputStream(urlConnect.getInputStream()); //will throw error
Oto ślad stosu dla każdego:
getResponse:
03-14 09:49:18.547: W/System.err(6270): java.io.EOFException
03-14 09:49:18.547: W/System.err(6270): at libcore.io.Streams.readAsciiLine(Streams.java:203)
03-14 09:49:18.547: W/System.err(6270): at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:573)
03-14 09:49:18.547: W/System.err(6270): at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:821)
03-14 09:49:18.547: W/System.err(6270): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283)
03-14 09:49:18.547: W/System.err(6270): at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495)
03-14 09:49:18.547: W/System.err(6270): at libcore.net.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:134)
BufferedInputStream:
03-14 09:39:14.077: W/System.err(5935): java.io.EOFException
03-14 09:39:14.077: W/System.err(5935): at libcore.io.Streams.readAsciiLine(Streams.java:203)
03-14 09:39:14.077: W/System.err(5935): at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:573)
03-14 09:39:14.077: W/System.err(5935): at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:821)
03-14 09:39:14.077: W/System.err(5935): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283)
03-14 09:50:46.547: W/System.err(6476): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)
03-14 09:50:46.547: W/System.err(6476): at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
Dziękuję za wszelką pomoc,
Rick
EDIT znalazłem moją odpowiedź:
To nie była dobrze udokumentowana odpowiedź. Pojawia się w niektórych nowszych wersjach Androida, jest błąd związany z recyklingowymi połączeniami URL. Aby to naprawić (chociaż mogą występować problemy z wydajnością), musiałem dodać:
if (Build.VERSION.SDK != null
&& Build.VERSION.SDK_INT > 13) {
urlConnect.setRequestProperty("Connection", "close");
}
Dzięki!
Rick
Nie trzeba sprawdzać pliku Build.VERSION.SDK, ponieważ go nie używano. –
urlConnect.setRequestProperty ("Połączenie", "zamknij"); –
To działa dla mnie, magia !!! dzięki twojemu postowi. –