Android - получение ресурса изображения в Uri: IllegalArgumentException - PullRequest
7 голосов
/ 16 марта 2012

Я пытаюсь загрузить изображение из ресурса в моем приложении для 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?

Ответы [ 3 ]

9 голосов
/ 16 марта 2012

Если вы можете поместить файл изображения в папку assets, приведенный ниже код можно использовать для получения Uri -

Uri uri=Uri.parse("file:///android_asset/images/missing_album_art.png");

Обратите внимание, что Uri.parse используется для получения Uri из строки Url, а не из ресурса напрямую. Есть и другие более чистые решения, но я не могу их вспомнить. Я обновлю пост, когда найду их.

Edit: Если вы хотите использовать ресурс напрямую, путь String Uri должен иметь следующий формат: -

"android.resource://[package]/[res type]/[res name]"

Проверьте этот пост.

3 голосов
/ 16 марта 2012

Все ресурсы сопоставлены с целыми числами. Вы хотите получить целочисленное значение R.drawable.missing_album_art, а затем добавить это к остальной части вашей строки пути. то есть.,

Uri uri = Uri.parse("android.resource://android.aberplayer/" + R.drawable.missing_album_art);

… то есть, если тебе действительно нужен Ури. Как правило, вы можете просто использовать ресурс изображения, подобный этому:

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;
}
0 голосов
/ 16 марта 2012

Попробуйте вместо этого

Uri uri = Uri.parse("R.drawable.missing_album_art");
...