2

好的,我终于把问题归结为这种方法。

我有一个名为 file 的 File 对象,当我执行 toString() 时,它输出以下内容

/storage/emulated/0/Pictures/ecohelp/IMG_ecohelp_20131016_214242.jpg

现在在将 File 对象插入以下方法之后

Uri uriFile = Uri.fromFile(file);

当我执行 uriFile.toString() 时,它会输出以下内容

file:///storage/emulated/0/Pictures/ecohelp/IMG_ecohelp_20131016_214242.jpg

现在我尝试在“/ storage ...”开头删除/,但它仍然不起作用,有人知道为什么会这样吗?它应该是 file:// 和其他任何东西一样,但它会放在其中的三个上。

我试图模仿这个图像:http: //developer.android.com/guide/topics/media/camera.html#saving-media

尝试保存文件时出现此错误:

10-16 22:16:39.945: E/AndroidRuntime(32080): java.lang.RuntimeException: 
Failure delivering result ResultInfo{who=android:fragment:2, request=100, 
result=-1, data=null} to activity 
{com.example.ecohelp/com.example.ecohelp.MainActivity}: java.lang.NullPointerException
4

3 回答 3

0

这被认为是正确的行为,因为 URI 包含以下元素:

  • 方案:file://
  • 小路:/storage/emulated/0/Pictures/ecohelp/IMG_ecohelp_20131016_214242.jpg

所有文件 URI 通常有 3 个斜杠,两个用于方案,一个表示路径应该从文件系统的根目录开始 ( /)。

于 2013-10-16T20:20:39.430 回答
0

我不认为这是因为 file:// 之后的额外 / 字符。实际上,API 提到了一个示例,其中包含 files:///。

http://developer.android.com/reference/android/net/Uri.html#fromFile(java.io.File)

根据错误消息,您似乎没有正确地将数据传递给 MainActivity。也许我们可以看到更多代码?

于 2013-10-16T20:21:38.057 回答
0

实际上,您收到的字符串是正确的 URI。

简而言之,URI 语法如下:

(方案)://(路径)

其中 path 可能包含更多子字段(请查看http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax以获得关于这些子字段的更完整讨论)。

现在,对于“文件”方案,路径是相对本地路径或绝对本地路径。绝对路径,在基于 Unix 的系统上,将以斜杠开头。

所以你的字符串是完全正确的:

file:///storage/emulated/0/Pictures/ecohelp/IMG_ecohelp_20131016_214242.jpg

表示方案为“文件”,路径为绝对本地文件:“/storage/emulated/0/Pictures/ecohelp/IMG_ecohelp_20131016_214242.jpg”,这是您创建的文件对象的正确位置。

至于您的 NullPointerException,我认为它与 URI 或文件无关。我对 Android 开发了解不多,但我相信你应该在某个地方有一个 onActivityResult 方法。是不是你在没有首先检查空值的情况下在某个变量上调用了一个方法?

于 2013-10-16T20:25:28.070 回答