You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin中通过ImageUrl创建Bitmap?已遇类型不匹配错误

在Kotlin中用Glide通过URL创建Bitmap的正确方式

你遇到的类型不匹配错误,是因为Glide.with(...).asBitmap().load()返回的是请求构建器(RequestBuilder),而非直接的Bitmap对象,不能直接赋值给Bitmap类型变量。下面是两种可行的实现方案:

方案一:同步获取(需在子线程执行)

如果需要同步拿到Bitmap,必须在子线程中操作,避免阻塞主线程引发ANR:

// 借助Coroutine在IO线程执行请求
lifecycleScope.launch(Dispatchers.IO) {
    try {
        val bitmap = Glide.with(requireContext())
            .asBitmap()
            .load(imageUrlUri)
            .submit() // 提交同步请求
            .get() // 阻塞当前线程获取Bitmap结果
        
        // 切换回主线程更新UI或使用Bitmap
        withContext(Dispatchers.Main) {
            bitMap = bitmap
            // 这里可以做UI相关操作,比如设置到ImageView
        }
    } catch (e: Exception) {
        e.printStackTrace()
        // 处理图片加载失败的情况,比如网络错误、链接无效等
    }
}

方案二:异步监听获取(推荐)

Glide默认是异步加载,通过自定义CustomTarget监听加载结果,无需手动处理线程切换:

Glide.with(requireContext())
    .asBitmap()
    .load(imageUrlUri)
    .into(object : CustomTarget<Bitmap>() {
        override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
            // 加载成功,拿到Bitmap对象
            bitMap = resource
            // 这里可以直接更新UI,回调在主线程执行
        }

        override fun onLoadCleared(placeholder: Drawable?) {
            // 当Glide清除资源时调用,可在此释放Bitmap避免内存泄漏
            bitMap?.recycle()
            bitMap = null
        }

        override fun onLoadFailed(errorDrawable: Drawable?) {
            super.onLoadFailed(errorDrawable)
            // 加载失败的处理逻辑
        }
    })

注意事项

  • 同步方式必须在子线程执行,否则会阻塞主线程
  • 使用CustomTarget时,Glide会自动关联上下文生命周期,减少内存泄漏风险
  • 记得处理加载失败的异常情况,提升代码健壮性

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:40:34