我正在尝试从我的Android应用中的资源加载图片,但我不断收到“IllegalArgumentException:URI中的预期文件方案”错误。
我将'missing_album_art.png'文件放在我的项目中的drawable-hdpi,drawable-ldpi和drawable-mdpi文件夹中,并刷新Eclipse以便显示它们就在那里。
我用来创建Uri的行是:
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)
在Android应用程序中访问图像资源有什么我不明白的地方吗?
答案 0 :(得分:9)
如果您可以将图片文件放入assets
文件夹,则可以使用以下代码获取Uri
-
Uri uri=Uri.parse("file:///android_asset/images/missing_album_art.png");
请注意,Uri.parse
用于从字符串Uri
获取Url
而不是直接从资源获取。还有其他更清洁的解决方案,但我无法回想起它们。我发现它们时会更新帖子。
修改强> 如果要直接使用资源,String Uri路径应采用以下格式: -
"android.resource://[package]/[res type]/[res name]"
答案 1 :(得分:3)
资源全部映射到整数。您想获取R.drawable.missing_album_art的整数值,然后将其附加到路径字符串的其余部分。即,
Uri uri = Uri.parse("android.resource://android.aberplayer/" + R.drawable.missing_album_art);
......也就是说,如果你确实需要Uri。通常,您可以使用这样的图像资源:
view.setImageResource(R.drawable.missing_album_art);
如果要将资源读入文件,以下是一种方法(将文件写入应用程序目录(即/ data / data / packagename),名称为“filename”):
private File resToFile(int resourceID, String filename) {
File file = getApplicationContext().getFileStreamPath(filename);
if(file.exists()) {
return file;
}
InputStream is;
FileOutputStream fos;
try {
is = getResources().openRawResource(resourceID);
byte[] buffer = new byte[is.available()];
is.read(buffer);
fos = openFileOutput(filename, MODE_PRIVATE);
fos.write(buffer);
fos.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return file;
}
答案 2 :(得分:-3)
试试这个
Uri uri = Uri.parse("R.drawable.missing_album_art");