【发布时间】:2018-04-22 13:03:22
【问题描述】:
更新
经过一些调试,我发现 给定代码中的 Catch 块在没有任何异常异常的情况下执行。 我打印返回一些值的输入流,事件位图变量被初始化,但是一旦它执行了 catch 块,它就会返回 null 到 onPostExecute 方法。
寻找它发生的原因?
Please check debug screenshot of studio
结束
我使用的是 Android Studio 3.0。
使用 Kotlin 支持创建简单的 android 应用程序,该应用程序在 AsyncTask 类和 HTTPURLConnection 类的帮助下从给定 http 协议 url 下载图像。
在执行 AsyncTask 类时,我从 HTTPURLConnection 对象获取 http 响应代码 200,但是在使用 BitmapFactory.decodeStream(inputstream) 方法解码流时抛出 IOEXception。
StackTrace 容易出错 原因:android.system.ErrnoException: recvfrom failed: EBADF ,在调用此 BitmapFactory.decodeStream(inputstream) 方法的同一行。
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
}
【问题讨论】:
-
connection.disconnect()如果我还想从流中读取数据,我不会这样做。 -
我已经收集了输入流参考:在断开线路之前但即使在删除 connection.disconnect() 之后我仍然收到同样的错误。
-
connection.doOutput = true删除该声明。这是POST。 -
@geenapps:还是同样的问题
标签: android android-asynctask kotlin