2012-03-16 26 views
6

我試圖加載從資源的圖像在我的Android應用程序,但我不斷收到:錯誤「拋出:IllegalArgumentException在URI預計文件方案」。Android的 - 讓圖像資源到烏里:拋出:IllegalArgumentException

我將我的'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

試試這個

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

這將導致「拋出:IllegalArgumentException:URI不絕對:R.drawable.missing_album_art「當我嘗試將Uri轉換爲文件與此: 'currentAlbumArt = new File(new URI(uri.toString()));' – JakeP 2012-03-16 11:19:01

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); 

如果你想讀一個資源到一個文件,下面是做到這一點(單程此寫入文件的應用程序目錄(即/數據/數據/包),名稱爲「文件名」):

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

我改變了代碼以追加R. drawable.missing _album_art的字符串,但問題仍然存在,只是現在的錯誤行是 'java.lang.IllegalArgumentException異常:預期在URI文件方案:android.resource:// src.android.aberplayer/2130837505' – JakeP 2012-03-16 11:23:34

+0

是否有可能存在一個問題,因爲我試圖使用上述的Uri。解析與活動不同的類中的行? 當我在應該顯示圖片的Activity中使用它時,它工作正常。 但是,當我嘗試在不擴展或實現任何Android類的其他類中使用它時,會導致錯誤。 你能爲我解釋一下嗎? (你需要看任何代碼?) – JakeP 2012-03-16 22:51:07

+0

@KurakDarcia嗯。說實話我不確定。我覺得這個錯誤不是來自'Uri.parse'行的。也許發佈一些更多的上下文/代碼行。你爲什麼使用Uri /你如何使用它? – 2012-03-17 20:27:13

8

如果你可以把圖像文件到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]" 

檢查this post.

+0

只是提醒一下,框架中的常量是:'ContentResolver.SCHEME_ANDROID_RESOURCE' – Simon 2014-11-22 02:50:19

相關問題