40 votes

Eofexception Android HttpsUrlConnection

J'ai un problème lorsque mon HttpsURLConnection va jeter un EOFException lorsque je tente de lire n'importe quelle entrée. Le code fonctionne pour certains appels réseau, mais échoue sur les autres. Si j'essaie de le lire quoi que ce soit à partir de la connexion, il échoue avec l'erreur susmentionnée.

Exemple:

urlConnect.getResponseCode() // will throw error
urlConnect.getResponseMessage() // will throw error
BufferedInputStream in = new BufferedInputStream(urlConnect.getInputStream()); //will throw error

Voici la trace de la pile pour chaque:

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)

Merci pour toute aide,

Rick

MODIFIER J'ai trouvé ma réponse:

Ce n'était pas un bien documentés réponse. Il apparaît dans certaines des versions les plus récentes d'android, il y a un bug avec recyclés url connexions. Pour corriger cela (même si il peut y avoir certains problèmes de performances), j'ai besoin d'ajouter:

if (Build.VERSION.SDK != null
&& Build.VERSION.SDK_INT > 13) {
urlConnect.setRequestProperty("Connection", "close");
}

Merci!

Rick

42voto

user1883083 Points 346

Quelqu'un a demandé que je réponde à ma propre question au lieu de le modifier. Alors voici la réponse à nouveau.

Ce n'était pas une réponse bien documentée. Il apparaît dans certaines des versions les plus récentes d’android, il existe un bogue avec les connexions d’URL recyclées. Pour résoudre ce problème (bien qu'il puisse y avoir des problèmes de performances), j'avais besoin d'ajouter:

if (Build.VERSION.SDK! = null && Build.VERSION.SDK_INT> 13) {urlConnect.setRequestProperty ("Connexion", "fermer"); }

0voto

Phuah Yee Keat Points 465

J'utilise NetHttpTransport de google-api-java-client , il n'était donc pas vraiment évident de définir la propriété RequestProperty; j'ai alors choisi d'utiliser ApacheHttpTransport et le problème a disparu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X