Java Android XML解析错误-“;不能';t打开…/directory/container.xml“;

Java Android XML解析错误-“;不能';t打开…/directory/container.xml“;,java,android,xml,parsing,android-sdcard,Java,Android,Xml,Parsing,Android Sdcard,我试图解析安卓设备SD卡上的XML文件 这段代码- SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); sp.parse("/mnt/sdcard/Speedr/pg55/META-INF/container.xml", xmlHandler); 输出此错误- 无法打开/mnt/sdcard/Speedr/pg55/META-INF/contain

我试图解析安卓设备SD卡上的XML文件

这段代码-

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
sp.parse("/mnt/sdcard/Speedr/pg55/META-INF/container.xml", xmlHandler);
输出此错误-

无法打开/mnt/sdcard/Speedr/pg55/META-INF/container.xml

原因:java.net.MalformedURLException:找不到协议:/mnt/sdcard/Speedr/pg55/META-INF/container.xml

为了简单起见,我更改了sp.parse()位置,但这正是实际代码中传递给该方法的内容。我还拿走了应该围绕它的try/catch支架

文件肯定在那里,如果我在手机或电脑上浏览到它,我可以看到它,而且位置也正确,因为它没有给我一个FileNotFound错误

我最初在独立Java中构建了这段代码,一直试图在Android设备上实现它,但遇到了这个错误。错误日志确实没有什么帮助


我非常感谢这里的任何人为我提供的帮助。

您是否在清单中启用或添加了SD卡权限?

请确保您的
androidManifest.xml
中包含以下权限,以防您要修改xml或保存其他文件:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
这样,您将向解析器传递一个文件,因此不需要指定
文件://
协议
尝试不使用静态路径。外部存储路径会根据设备的不同而变化。
使用
Environment.getExternalStorageDirectory()
是一种良好的做法

您可能还想检查
xml
文件是否存在,等等,但基本上这是它应该工作的方式


有关存储状态等的进一步检查,请参见Android开发者手册。

您必须指定http、ftp、文件等协议。在这里,您是从SD卡访问它的,因此在整个路径之前它将是
“file://”

现在使用以下命令修改您的代码段:

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
sp.parse("file://" + "/mnt/sdcard/Speedr/pg55/META-INF/container.xml", xmlHandler);

请您分享堆栈跟踪,这将帮助我们找出问题的根源。这是我的问题,这是try/catch括号捕获的唯一错误,这是我向您展示的,它没有给我任何其他信息。之后的任何错误都是无法读取文件的简单结果。实际上,我对这个错误的堆栈跟踪感兴趣。您应该从LogCat复制它(或者如果您不使用它,只需在设备上调试应用程序时运行ddms)。请看我的帖子,可能会帮你找到正确的方向。事实上,当我再次查看时,我发现它有一个java.net.MalformedURLException,我已经编辑了主要评论以显示这一点。也许这会更接近问题所在?谢谢你的帮助,顺便说一下,我已经启用了android.permission.INTERNET和android.permission.WRITE\u外部存储的权限。我相信这就是所需的一切,因为我已经能够毫无问题地加载.txt文件了。不,将行更改为sp.parse(Environment.getExternalStorageDirectory()+“/Speedr/pg55/META-INF/container.xml”,xmlHandler);给出了相同的错误。您应该注意上面的一行,它正在创建一个新文件。如果你想坚持静态路径,你应该在你的路径字符串前面指定
文件://
协议(这就是为什么它会给你
畸形异常
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
sp.parse("file://" + "/mnt/sdcard/Speedr/pg55/META-INF/container.xml", xmlHandler);