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

Android Studio项目中Glide加载本地图片失败(GlideException)求助

解决Glide加载本地图片失败的问题

核心原因

你使用的路径是macOS本地桌面路径(/Users/macbookair/Desktop/...),Android应用(无论是模拟器还是物理设备)无法直接访问电脑本地的文件系统——Android应用运行在独立的沙箱环境中,没有权限访问宿主电脑的文件,这是导致FileNotFoundException的直接原因。

解决方案

根据图片的实际存储位置,选择对应的加载方式:

1. 图片是应用内置资源(drawable/assets目录)

如果图片是应用打包时包含的资源:

  • Drawable目录:将图片放入res/drawable文件夹,直接引用资源ID:
Glide.with(itemView.context)
    .load(R.drawable.pet_29022024004317)
    .listener(object : RequestListener<Drawable> {
        override fun onLoadFailed(
            e: GlideException?,
            model: Any?,
            target: Target<Drawable>?,
            isFirstResource: Boolean
        ): Boolean {
            Log.e("Glide", "Image loading failed", e)
            return false
        }

        override fun onResourceReady(
            resource: Drawable?,
            model: Any?,
            target: Target<Drawable>?,
            dataSource: DataSource?,
            isFirstResource: Boolean
        ): Boolean {
            return false
        }
    })
    .into(petImage)
  • Assets目录:将图片放入src/main/assets文件夹,使用Uri加载:
Glide.with(itemView.context)
    .load(Uri.parse("file:///android_asset/pet_29022024004317.jpg"))
    .listener(...)
    .into(petImage)

2. 图片存储在应用内部存储

如果图片是应用自己保存到内部存储的:

// 获取应用内部存储的文件对象
val file = File(itemView.context.filesDir, "uploads/pet_29022024004317.jpg")
Glide.with(itemView.context)
    .load(file)
    .listener(...)
    .into(petImage)

3. 图片存储在设备外部存储

如果图片在设备的外部存储(如SD卡):

  • 先申请权限:
    • Android 12及以下:在AndroidManifest.xml添加<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>,并动态申请权限。
    • Android 13及以上:添加<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>,并动态申请权限。
  • 再加载文件:
val file = File(Environment.getExternalStorageDirectory(), "uploads/pet_29022024004317.jpg")
Glide.with(itemView.context)
    .load(file)
    .listener(...)
    .into(petImage)

4. 测试时加载电脑本地图片到模拟器

如果是测试需要,可通过Android Studio的Device File Explorer将图片上传到模拟器的存储(比如/sdcard/Download/),然后使用模拟器内的路径加载:

val file = File("/sdcard/Download/pet_29022024004317.jpg")
Glide.with(itemView.context)
    .load(file)
    .listener(...)
    .into(petImage)

额外注意事项

  • 确保文件路径拼写正确,区分大小写。
  • 加载前可通过file.exists()判断文件是否存在。
  • Glide加载本地文件时,传入File对象比字符串路径更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:52:35