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

通过路径获取drawable目录图片失败,附代码求解决

解决Drawable资源加载失败的问题

嘿,我来帮你搞定这个问题~你的代码之所以跑不起来,核心原因是你把Android资源Uri当成了本地文件路径来处理,这完全是两种不同的东西哦!

为什么原代码不行?

android.resource://开头的Uri是Android用来访问APK内部资源的特殊标识,这些资源是打包在APK里的,并不是手机文件系统中真实存在的独立文件。所以用File类去判断它的存在性,或者用BitmapFactory.decodeFile()去解码,肯定会失败——因为这个"路径"根本不是真实的文件路径。

正确的解决方案

方案1:直接用资源ID加载(推荐,最简单)

这是Android加载Drawable资源最标准、最省心的方式,系统会自动帮你处理不同分辨率的资源适配:

ImageView imgLogo = findViewById(R.id.imageView_logo);
imgLogo.setImageResource(R.drawable.logo_ataturk);

方案2:如果必须用Uri方式加载

如果你的场景确实需要通过Uri来加载(比如某些第三方库要求传入Uri),可以通过ContentResolver获取资源的输入流,再解码成Bitmap:

String uriString = "android.resource://" + BuildConfig.APPLICATION_ID + "/drawable/logo_ataturk";
Uri resourceUri = Uri.parse(uriString);

try (InputStream inputStream = getContentResolver().openInputStream(resourceUri)) {
    Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
    ImageView imgLogo = findViewById(R.id.imageView_logo);
    imgLogo.setImageBitmap(bitmap);
} catch (IOException e) {
    e.printStackTrace();
    // 这里可以加异常处理逻辑,比如显示一张占位图
}

额外提醒

永远不要试图用File类去访问APK内部的资源,它们没有真实的文件系统路径。如果需要操作资源内容,都要通过Resources或者ContentResolver来处理~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:03:18