更新
经过一些调试后,我发现给定代码中的Catch块在执行时没有任何异常。我打印了返回一些值的inputstream,事件bitmap varibale被初始化,但是一旦它执行了catch块,它就向onPostExecute方法返回null。
寻找为什么会发生这种情况?
请查看工作室的调试截图
结束
我使用的是 Android Studio 3.0。
创建了具有Kotlin支持的简单android应用程序,该应用程序在AsyncTask类和HTTPURLConnection类的帮助下从give http协议url下载图像。
在执行AsyncTask类时,我从HTTPURLConnection对象获得http响应代码200,但在使用bitmapfactory . decode stream(inputstream)方法解码流时引发了IOEXception。
StackTrace趋向于由以下原因引起的错误:android.system。ErrnoException:recvfrom失败:EBADF,与调用此位图工厂位于同一行。解码流(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
}
它是java,但您可以将其适应静态编程语言:
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
connection.disconnect()
只有在已经阅读了正文的响应之后,才应该调用disconnect。
问题内容: 尝试附加到go例程中的日志文件时,我得到了错误的文件描述符。 该文件存在,并且具有666的权限。起初我想很好,也许是因为他们每个人都试图同时打开文件。我实现了一个互斥体来尝试避免这种情况,但是遇到了同样的问题,因此我将其删除。 问题答案: 您需要添加标志: 为了说明,这是Linux文档:http : //man7.org/linux/man- pages/man2/openat.2.h
请参见Debian 镜像列表来选择离你 较近的 (很可能是最快的) 镜像服务器。 当从 Debian 镜像服务器下载文件的时候,请确认下载的文件是处于 二进制模式,而不是文本或者自动模式。 4.2.1. 哪里能找到安装映像 安装映像位于每一个 Debian 镜像目录 debian/dists/sarge/main/installer-i386/current/images/ 下面 ── 文件 MA
选择离您较近的(因此很可能也是最快的)镜像服务器,请参见 Debian 镜像列表。 当从 Debian 镜像服务器下载文件的时候,请确认下载的文件是处于二进制模式,而不是文本或者自动模式。 4.2.1. 在哪里能找到安装映像 安装映像位于每一个 Debian 镜像的 debian/dists/sarge/main/installer-ia64/current/images/ — MANIFEST
选择离您较近的(因此很可能也是最快的)镜像服务器,请参见 Debian 镜像列表。 当从 Debian 镜像服务器下载文件的时候,请确认下载的文件是处于二进制模式,而不是文本或者自动模式。 4.2.1. 在哪里能找到安装映像 安装映像位于每一个 Debian 镜像的 debian/dists/sarge/main/installer-powerpc/current/images/ — MANIFE
一、功能说明 本功能主要提供镜像下载字段的属性进行设置 关于镜像的含义本文档不再详述,有意者请参考百度百科 二、子功能导航 1.添加镜像 2.管理镜像 3.功能示例 三、功能详述 1.添加镜像 如下图所示 界面详述 1). 镜像站名称: 您可以自行定义 2). 镜像站地址: 根据您的具体情况填写且确保该地址能够正常访问 3). 所属站点: 如果您启用了多站点那么请选择您欲添加的子站点 2.管理镜像
文件描述符 Linux很重要的设计思想就是一切皆文件,网络是文件,键盘等外设也是文件,很神奇吧?于是所有资源都有了统一的接口,开发者可以像写文件那样通过网络传输数据,我们也可以通过/proc/的文件看到进程的资源使用情况。 内核给每个访问的文件分配了文件描述符(File Descriptor),它本质是一个非负整数,在打开或新建文件时返回,以后读写文件都要通过这个文件描述符了。 应用 我们想想操作