Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 分析异常:第1行第0列:未找到元素_Java_Xml_Android_Parsing_Httpurlconnection - Fatal编程技术网

Java 分析异常:第1行第0列:未找到元素

Java 分析异常:第1行第0列:未找到元素,java,xml,android,parsing,httpurlconnection,Java,Xml,Android,Parsing,Httpurlconnection,我有个奇怪的问题。我收到以下导致强制关闭的错误: org.apache.harmony.xml.ExpatParser$ParseException:第1行第0列:在org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:508)中未找到任何元素 位于org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:467) 位于org.apache.ha

我有个奇怪的问题。我收到以下导致强制关闭的错误:

org.apache.harmony.xml.ExpatParser$ParseException:第1行第0列:在org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:508)中未找到任何元素 位于org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:467) 位于org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:329) 位于org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:286)

单击“强制关闭”按钮后,将重新创建活动,解析将顺利完成。我在异步任务的doInBackground中使用以下代码段:

URL serverAddress = new URL(url[0]);

HttpURLConnection connection = (HttpURLConnection) serverAddress.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.setReadTimeout(10000);
connection.connect();

InputStream stream = connection.getInputStream();

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();

XMLReader xr = sp.getXMLReader();

xr.parse(new InputSource(stream));  // The line that throws the exception
为什么活动强制关闭,然后立即运行而没有任何问题?BufferedInputStream会有什么不同吗?我很困惑(

谢谢大家抽出时间


更新:结果是HttpURLConnection.getResponseCode()每隔一段时间返回-1,因此InputStream可能没有正确设置。

Per
InputStream
javadoc方法将阻塞,直到数据可用或遇到EOF。因此,套接字的另一端需要关闭它,然后是inStream.read()电话会回来的

如果使用
BufferedReader
,则可以逐行读取。读取HTTP响应中的一行后,
readLine()
方法将立即返回

HTTPURLConnection connection = (HttpURLConnection) serverAddress.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
这些行有点奇怪。是
HTTPURLConnection
还是
HTTPURLConnection
?默认的请求方法已经是
GET
。但是
setDoOutput(true)
将强制它执行
POST

我会用

URLConnection connection = serverAddress.openConnection();
然后重试。它可能会返回一个错误,因为您强制了
POST
,并且没有向输出(请求正文)写入任何内容。顺便说一下,
connection.connect()
已经被
connection.getInputStream()
隐式调用,因此该行也是多余的

更新:以下用于测试目的的方法是否有效

BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
for (String line; (line = reader.readLine()) != null;) {
    System.out.println(line);
}
reader.close();

在相关的设计说明中,加载URL的内容不应强制关闭活动-我建议将所有这些都放入AsyncTask实现中,并在返回GUI线程后报告或重试。

我不知道您是否修复了此问题,但我遇到了相同的问题。这很奇怪,在模拟器中可以正常工作,但在在手机上,它总是给我
xr.parse()
错误。即使在我打印
InputStream
时,它也会给我xml文档的合法输出。问题似乎在于创建
InputSource
对象

我是这样修复的:我没有使用
InputStream
来创建
InputSource
而是直接从url字符串创建输入源

InputSource a =  new InputSource(url_string);   

其中url\u string只是一个带有url的字符串。不要问我为什么它会工作…我真的不喜欢它,因为没有办法检查超时和类似的事情。但是它工作了,让我知道它是如何工作的!

我遇到了同样的问题,无法理解它,因为我是直接从输入源解析的。当我修改为了在xml解析之前将结果拉入字符串,我发现问题仅仅是错误的web服务方法名称,该服务报告的错误消息是致命的。

即使我也面临同样的问题。 我第一次使用
Scanner
中的
InputStream
来打印它的内容。 然后尝试将其传递到XML解析器中

问题是我没有关闭
扫描器
对象,也没有在解析器中使用
输入流


关闭scanner对象后,我能够解决这个问题。

看起来流是空的,你能用commons IOUtils将它的内容转储到System.out.println吗?这是一个复制粘贴吗?
HTTPURLConnection
!=
HTTPURLConnection
。这是一个打字错误,HTTPURLConnection已修复。非常抱歉。谢谢BalusC信息量大。将进行更改并对其进行尝试。有趣的是,大多数情况下XML解析都很顺利。抛出异常几乎是幸运的……尽管异常发生的频率似乎很高,这可能会成为一个问题。在进行更改后,强制关闭行为仍然存在。似乎解析器不存在不要解析任何东西。与调试器联系以了解问题的真相。关于更新,这应该可以工作,但我认为Android中使用了System.util.Log而不是System.out。将测试并更新原始帖子。谢谢!谢谢你,ring Bear,将进一步研究。同意。原始帖子中的代码片段驻留在do中AsyncTask的Background。感谢您的响应。我认为它不会特别适用于我的情况,因为我需要使用HttpURLConnection.setRequestProperty()。我已通过检查响应代码并重试连接(如果代码为-1)暂时修复了此问题。不过,您的输入可能会帮助其他人!