Intereting Posts
Разница между статическими и разделяемыми библиотеками в NDK от Android? Не удается найти метод getPackageManager () в android Android: Прослушивание изменений контактов, таких как WhatsApp Можно раздуть XML-макет в службе? (Android) Использование getRotationMatrix и getOrientation в Android 2.1 Как открыть приложение «Календарь» в определенном календаре Какой USB-драйвер мы должны использовать для Nexus 5? Параметры отладки недоступны в Eclipse после повторной установки ADT Клавиатура скрывает EditTexts во фрагментах Как использовать ExecutorService с Android AsyncTask? Добавление нижнего поля в последний элемент списка ListView Автоматически разрешает сборку Android Ошибка: пиксели кадра должны быть сплошными или прозрачными (не промежуточными альфа). – Найден в пикселе # 4 вдоль верхнего края В чем преимущество загрузчиков через Asynctask в Android? Mapfragment findFragmentById всегда null Как создать ListView с закругленными углами в Android?

FileNotFoundException для HttpURLConnection в сэндвиче с мороженым

У меня есть приложение для Android, которое отлично работает с Android 2.x и 3.x, но оно не работает при запуске на Android 4.x.

Проблема в этом разделе кода:

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(); 

Когда приложение запускается на Android 4.x, вызов getInputStream() приводит к FileNotFoundException . Когда тот же самый бинарный файл работает в более ранних версиях Android, он преуспевает. URL-адреса также отлично работают в веб-браузерах и с curl .

По-видимому, что-то о HttpURLConnection изменилось в ICS. Кто-нибудь знает, что изменилось, и / или какое исправление может быть?

Solutions Collecting From Web of "FileNotFoundException для HttpURLConnection в сэндвиче с мороженым"

Попробуйте удалить вызов setDoOutput. Из этого блога: блог

Изменить: это необходимо при использовании вызова POST.

Исключение FileNotFoundException также может быть запущено, если сервер возвращает код ошибки (например, 400 или 401). Вы можете справиться с этим следующим образом:

 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... } 

Я не знаю, почему, но ручная работа с перенаправлением решает проблему.

 connection.setInstanceFollowRedirects(false); 

Немного поздно, но вы также можете проверить принятый контент. Вы можете добавить эту строку, чтобы принимать все виды контента

 urlConnection.setRequestProperty("Accept","*/*");