2013-10-16 70 views
1

好吧我终于把问题归结为这种方法。Java Uri.fromFile路径问题

我有称为文件File对象,当我做一个toString()它输出如下

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

现在后的文件对象被插入到以下方法

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 

回答

0

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

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

所有文件的URI通常有3条斜线,两个用于计划,一个说的路径应该从根本上启动文件系统(/)。

0

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

总之,一个URI语法的去为:

(方案)://(路径)

其中路径可能包含更多的子域(在http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax看看关于这些一个更完整的讨论子场)。

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

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

文件:///storage/emulated/0/Pictures/ecohelp/IMG_ecohelp_20131016_214242.jpg

意味着该方案为 “file”,并且路径绝对本地文件:“/ storage/emulated/0/Pictures/ecohelp/IMG_ecohelp_20131016_214242。jpg“,这是你启动的File对象的正确位置

至于你的NullPointerException,我不认为它与URI或文件有关,我对Android开发并不了解,但我相信你应该有一个onActivityResult方法,可能是因为你在那里调用了某个方法,而没有首先检查空值?