44 votes

FileNotFoundException pour HttpURLConnection en Sandwich à la Crème Glacée

J'ai une application Android qui fonctionne très bien avec Android 2.x et 3.x, mais il échoue lorsqu'il est exécuté sur Android 4.x.

Le problème est dans cette section de code:

URL url = new URL("http://blahblah.blah/somedata.xml");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();

InputStream inputStream = urlConnection.getInputStream();

Lorsque l'application est en cours d'exécution sur Android 4.x, l' getInputStream() résultats des appels en FileNotFoundException. Lorsque le même binaire est en cours d'exécution sur des versions antérieures d'Android, il réussit. L'Url aussi bien fonctionner dans les navigateurs web et avec curl.

Apparemment, quelque chose à propos de HttpURLConnection a changé dans ICS. Quelqu'un at-il une idée de ce qui a changé, et/ou que le correctif peut-être?

96voto

reuscam Points 887

Essayez de supprimer le setDoOutput appel. Prises à partir de ce blog: un blog

28voto

Un FileNotFoundException peut également été levée si le serveur renvoie un mauvais code d'erreur (par exemple, 400 ou 401). Vous pouvez gérer cela comme suit:

int responseCode = con.getResponseCode(); //can call this instead of con.connect()
if (responseCode >= 400 && responseCode <= 499) {
    throw new Exception("Bad authentication status: " + responseCode); //provide a more meaningful exception message
}
else {
    InputStream in = con.getInputStream();
    //etc...
}

5voto

Kirill Kulakov Points 1975

Je Ne sais pas pourquoi, mais à traiter manuellement avec la redirection permet de résoudre le problème.

connection.setInstanceFollowRedirects(false);

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