通过路径获取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
相关产品推荐
相关产品推荐

