Android-将图像资源放入Uri:IllegalArgumentException
我正在尝试从Android应用程序中的资源加载一个图像,但我一直收到“IllegalArgumentException:URI中的预期文件方案”错误 我把我的“missing_album_art.png”文件放在我的项目中的drawable hdpi、drawable ldpi和drawable mdpi文件夹中,并刷新Eclipse以显示它们在那里 我用来创建Uri的行是:Android-将图像资源放入Uri:IllegalArgumentException,android,image,resources,uri,drawable,Android,Image,Resources,Uri,Drawable,我正在尝试从Android应用程序中的资源加载一个图像,但我一直收到“IllegalArgumentException:URI中的预期文件方案”错误 我把我的“missing_album_art.png”文件放在我的项目中的drawable hdpi、drawable ldpi和drawable mdpi文件夹中,并刷新Eclipse以显示它们在那里 我用来创建Uri的行是: Uri uri = Uri.parse("android.resource://android.aberplayer/R
Uri uri = Uri.parse("android.resource://android.aberplayer/R.drawable.missing_album_art");
“android.aberplayer”是我的应用程序的主包,也是包含我在其中使用上述代码的类的包
我经常遇到的错误是:
03-16 00:16:29.252: E/AndroidRuntime(25598): FATAL EXCEPTION: main
03-16 00:16:29.252: E/AndroidRuntime(25598): java.lang.IllegalArgumentException: Expected file scheme in URI: android.resource://src.android.aberplayer/R.drawable.missing_album_art
03-16 00:16:29.252: E/AndroidRuntime(25598): at java.io.File.checkURI(File.java:245)
03-16 00:16:29.252: E/AndroidRuntime(25598): at java.io.File.<init>(File.java:182)
03-16 00:16:29.252: E/AndroidRuntime(25598): at android.aberplayer.CurrentSongList.getCurrentAlbumArt(CurrentSongList.java:69)
03-16 00:16:29.252:E/AndroidRuntime(25598):致命异常:main
03-16 00:16:29.252:E/AndroidRuntime(25598):java.lang.IllegalArgumentException:URI中应包含文件方案:android。resource://src.android.aberplayer/R.drawable.missing_album_art
03-16 00:16:29.252:E/AndroidRuntime(25598):位于java.io.File.checkURI(File.java:245)
03-16 00:16:29.252:E/AndroidRuntime(25598):位于java.io.File.(File.java:182)
03-16 00:16:29.252:E/AndroidRuntime(25598):在android.aberplayer.CurrentSongList.getCurrentAlbumArt(CurrentSongList.java:69)
在Android应用程序中访问图像资源有什么我不了解的吗?试试这个
Uri uri = Uri.parse("R.drawable.missing_album_art");
所有资源都映射到整数。您希望获得R.drawable.missing_album_art的整数值,然后将其附加到路径字符串的其余部分。i、 e
Uri uri = Uri.parse("android.resource://android.aberplayer/" + R.drawable.missing_album_art);
…也就是说,如果您确实需要Uri。通常,您可以使用如下图像资源:
view.setImageResource(R.drawable.missing_album_art);
如果要将资源读入文件,以下是一种方法(这会将名为“filename”的文件写入应用程序目录(即/data/data/packagename)):
如果可以将图像文件放入
assets
文件夹,则可以使用下面的代码获取Uri
-
Uri uri=Uri.parse("file:///android_asset/images/missing_album_art.png");
请注意,Uri.parse
用于从字符串Url
获取Uri
,而不是直接从资源获取。还有其他更清洁的解决方案,但我想不起来了。我找到他们后会更新帖子的
编辑:
如果要直接使用资源,字符串Uri路径应采用以下格式:-
"android.resource://[package]/[res type]/[res name]"
检查当我尝试使用以下内容将URI转换为文件时,会导致“IllegalArgumentException:URI不是绝对的:R.drawable.missing_album_art:
currentAlbumArt=new File(新URI(URI.toString())”代码>我更改了代码,将R.drawable.missing_album_艺术添加到字符串中,但问题仍然存在,只是现在错误行是java.lang.IllegalArgumentException:URI:android中的预期文件方案。resource://src.android.aberplayer/2130837505
是否可能是因为我试图在与活动不同的类中使用上述Uri.parse行而出现问题?当我把它用在应该显示图片的活动中时,它起了作用。然而,当我尝试在另一个类中使用它时,它不会扩展或实现任何Android类,它会导致一个错误。你能给我解释一下吗?(你需要看代码吗?@KurakDarcia嗯。老实说,我不确定。我觉得错误不是来自Uri.parse
行。可能会发布更多的上下文/代码行。为什么要使用Uri/如何使用它?刚才在下面看到您的评论,错误实际上来自currentAlbumArt=new File(new Uri(Uri.toString())代码>修改的答案,带有将资源写入文件的方法。仍然不确定这是否是您正在寻找的。只是提醒您框架中的常量是:ContentResolver.SCHEME\u ANDROID\u RESOURCE
"android.resource://[package]/[res type]/[res name]"