当前位置: 首页 > 知识库问答 >
问题:

IOException:AsyncTask镜像下载Kotlin Android(错误的文件描述符)

郎飞龙
2023-03-14

更新

经过一些调试后,我发现给定代码中的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
}

共有2个答案

冀翰翮
2023-03-14

它是java,但您可以将其适应静态编程语言

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
connection.disconnect()
微生毅然
2023-03-14

只有在已经阅读了正文的响应之后,才应该调用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),它本质是一个非负整数,在打开或新建文件时返回,以后读写文件都要通过这个文件描述符了。 应用 我们想想操作