2017-01-22 126 views
-1

我有一個Android應用程序,我正在努力,現在我試圖從URI獲取文件(我將使用意圖從圖庫中獲取圖像,然後上傳它到使用Ion的node.js服務器)。問題是它總是拋出一個異常。我試過調試並得到了Uri.toString()。它看起來有點像這樣:從URI獲取路徑拋出異常

content://com.android.providers.media.documents/document/image%3A102 

我知道一個事實,即它應該是這樣的:

content://com.android.providers.media.documents/document/image:102 

我知道,%3A是表示:,但爲什麼它出現在Uri,我如何解決它?最後,我如何從這個Uri獲得我的文件?

+0

它的十六進制表示形式:在uri中,所有特殊字符都轉換爲十六進制表示形式。 – Sreemat

回答

0

我試圖從一個URI

一個Uri得到一個文件不是一個文件。 A Uri不必指向文件系統上的任何內容,更不用說可以訪問的地方。

,但它爲什麼會出現在烏里

一個Uri是一個不透明的句柄。它可以是任何ContentProvider希望它。

我該如何解決它?

因爲您不喜歡以4開頭的八位數字,所以您不會「修正」https://stackoverflow.com/questions/41795342/get-path-from-uri-throws-exception。就像堆棧溢出Web服務器定義它使用的URL一樣,ContentProvider也定義了它使用的值。

最後,我如何從這個Uri獲得我的文件?

理想情況下,你不這樣做。您使用ContentResolveropenInputStream()以獲得該Uri所標識內容的InputStream,Ion使用該內容。

如果Ion不支持此操作並且只能使用文件,請使用InputStream將字節複製到您控制的某個FileOutputStream(例如,getCacheDir())。使用該文件進行上傳,然後在完成後刪除文件。