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

Android加载Drawable资源遇IOException:资源未找到问题求助

解决Android加载Drawable中BMP资源的IOException问题

问题原因

Android系统会对res/drawable目录下的图片资源做优化处理(比如自动转换格式、压缩),导致原始BMP文件并非以你预期的路径或原始形式存在,这就是用ContentResolver通过Uri访问时提示“资源不存在”的核心原因。

解决方案

把BMP资源移到res/raw目录(如果没有这个目录,手动创建即可),该目录下的资源会原封不动打包进APK,不会被系统修改。之后直接通过Resources.openRawResourceFd获取文件描述符,无需构造复杂的Uri。

修改后的代码示例

try (AssetFileDescriptor assetFileDescriptor = getResources().openRawResourceFd(R.raw.lenna_512x512)) {
    ParcelFileDescriptor parcelFileDescriptor = assetFileDescriptor.getParcelFileDescriptor();
    int fd = parcelFileDescriptor.getFd();
    tv.setText(imageProcLoadNeon(fd));
    parcelFileDescriptor.close();
} catch (IOException ioException) {
    Toast.makeText(getApplicationContext(),"Image load failed",Toast.LENGTH_SHORT).show();
    ioException.printStackTrace();
    Log.e("MyCrappyApp", "image load error: " +  ioException.getMessage());
}

额外说明

  • 若一定要用drawable目录,可尝试通过getResources().openRawResource(R.drawable.lenna_512x512)获取InputStream,但这种方式无法直接拿到文件描述符,可能不匹配你的imageProcLoadNeon方法需求。
  • 移动资源后记得清理并重新构建项目,避免缓存干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:14:51