从URI获取路径抛出异常

时间:2017-01-22 19:41:02

标签: java android uri

我有一个我正在处理的Android应用程序,现在我正在尝试从URI获取文件(我将使用意图从图库中获取图像然后上传它到使用Ion的node.js服务器。问题是它总是引发异常。我尝试调试并获得了Uri.toString()。它看起来像这样:

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

我知道这应该是这样的事实:

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

我知道%3A代表:,但为什么它出现在Uri中,我该如何解决?最后,我如何从这个Uri获取我的文件?

1 个答案:

答案 0 :(得分:0)

  

我正在尝试从URI中获取文件

Uri不是文件。 Uri不必指向文件系统上的任何内容,更不用说您可以访问的地方了。

  

但为什么它会出现在Uri

Uri是一个不透明的句柄。它可以是ContentProvider想要的任何东西。

  

我该如何解决?

除了“修复”https://stackoverflow.com/questions/41795342/get-path-from-uri-throws-exception之外,你没有,因为你不喜欢以4开头的八位数字。就像Stack Overflow Web服务器定义它使用的URL一样,ContentProvider定义它使用的Uri值也是如此。

  

最后,我如何从这个Uri获取我的文件?

理想情况下,你没有。您使用ContentResolveropenInputStream()获取InputStream标识的内容Uri,而Ion使用该内容。

如果Ion不支持此功能并且只能使用文件,请使用InputStream将字节复制到您控制的某些FileOutputStream(例如,在getCacheDir()中)。使用该文件进行上传,然后在完成后删除该文件。