IOException: AsyncTask Image Загрузить Kotlin Android (дескриптор Bad File)

ОБНОВИТЬ

После некоторой отладки я узнаю, что блок Catch в данном коде выполняется без исключения исключения. Я печатаю входной поток, возвращающий какое-то значение, битбип бит события инициализируется, но после того, как он выполнил блок catch, он возвращает значение null в метод onPostExecute.

Выясните, почему это происходит?

Пожалуйста, проверьте скриншот отладки студии

КОНЕЦ

Я использую Android Studio 3.0.

Создал простое приложение для Android с поддержкой Kotlin, которое загружает изображение из URL-адреса http-протокола с помощью класса AsyncTask и класса HTTPURLConnection.

При выполнении класса AsyncTask я получаю код ответа HTTP 200 из объекта HTTPURLConnection, но в то время как поток декодирования с методом BitmapFactory.decodeStream (входной поток) вызывает IOEXception.

StackTrace имеет тенденцию к ошибке. Причина: android.system.ErrnoException: recvfrom failed: EBADF, на той же строке, где вызывается этот метод BitmapFactory.decodeStream (входной поток).

override fun doInBackground(vararg args: String?): Bitmap? { var bitmap: Bitmap? = null try { val url = URL(args[0]) val connection: HttpURLConnection = url.openConnection() as HttpURLConnection connection.requestMethod = "GET" connection.connectTimeout = 10 * 60 * 60 connection.readTimeout = 10 * 60 * 60 connection.doInput = true connection.doOutput = true connection.connect() val responseCode = connection.responseCode if (HTTP_OK == responseCode) { if (null != connection.inputStream) { val inputStream = connection.inputStream connection.disconnect() bitmap = BitmapFactory.decodeStream(inputStream) } }else{ Log.e("####","Error Response Code: ${responseCode}") } } catch (ex: IOException) { Log.e("####",ex.localizedMessage) } catch (ex: MalformedURLException) { ex.printStackTrace() } catch (ex: Exception) { ex.printStackTrace() } return bitmap } 

Вы должны только отключить связь после того, как вы уже прочитали тело ответа.

Это java, но вы можете адаптировать его к Kotlin:

 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); Bitmap myBitmap = BitmapFactory.decodeStream(input); connection.disconnect()