未终止的实体引用错误

问题描述:

我正在使用谷歌地图路由为我自己的Android应用程序。 2天前它运行良好,但之后,当应用程序运行通过logcat给我错误。任何机构能告诉我这个问题的原因和解决方案吗?未终止的实体引用错误

org.xml.sax.SAXParseException: unterminated entity ref (position:ENTITY_REF &@1:799 in [email protected]) 

private String[] getDirectionData(String sourceLat, String sourceLong, String destinationLat, String destinationLong) { 


String urlString = "http://maps.google.com/maps?f=d&hl=en&" +"saddr="+sourceLat+","+sourceLong+"&daddr="+destinationLat+","+destinationLong + "&ie=UTF8&0&om=0&output=kml"; 
Log.d("URL", urlString); 
Document doc = null; 
HttpURLConnection urlConnection = null; 
URL url = null; 
String pathConent = ""; 

try { 

    url = new URL(urlString.toString()); 
    urlConnection = (HttpURLConnection) url.openConnection(); 
    urlConnection.setRequestMethod("GET"); 
    urlConnection.setDoOutput(true); 
    urlConnection.setDoInput(true); 
    urlConnection.connect(); 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder db = dbf.newDocumentBuilder(); 
    doc = db.parse(urlConnection.getInputStream()); 

} catch (Exception e) { 

    Log.w("Error in google map",e); 
} 

NodeList nl = doc.getElementsByTagName("LineString"); 
for (int s = 0; s < nl.getLength(); s++) { 
    Node rootNode = nl.item(s); 
    NodeList configItems = rootNode.getChildNodes(); 
    for (int x = 0; x < configItems.getLength(); x++) { 
    Node lineStringNode = configItems.item(x); 
    NodeList path = lineStringNode.getChildNodes(); 
    pathConent = path.item(0).getNodeValue(); 
    } 
} 
String[] tempContent = pathConent.split(" "); 
return tempContent; 
} 
+0

添加一些代码和图片地址你的问题 – hasanghaforian 2012-07-29 06:00:51

+0

哦,找到完美的答案在这个论坛[链接到匹配的答案] [1] [1]:http://*.com/questions/11745314/why-retrieving-google-directions -for-android-using-kml-data-is-not-working-anymo – 2red13 2012-11-27 15:41:11

该错误消息是相当暗示:该ref标签是未终结,例如<ref>没有包含</ref>对。使用this等工具验证您的XML输入。

+1

没有用,问题很明显,但是响应由google验证并且代码确实自6月以来没有运行。我正在寻找相同的问题 – 2red13 2012-11-27 13:50:02

+0

@ 2red13你对我的答案有什么看法? – 10101010 2013-01-03 09:20:37

我不知道,但我认为是因为输出= kml不再可用很多用户都遇到麻烦。

+0

http://*.com/questions/11745314/why-retrieving-google-directions-for-android-using-kml-data-is-not-working-anymo – 2red13 2012-12-05 07:21:46

+0

如果您在浏览器中编写链接,kml事情只是运作良好。这表明编码存在一些问题。我面临同样的问题,相同的代码,但我不确定它是否提前几天输出。 – 10101010 2012-12-20 09:58:08

我自己面临同样的问题。这个例外即将到来是因为一些重要的KML元素最近被谷歌弃用了。例如,请参阅GeometryCollection。 如果您的代码尝试在接收到的文档中找到任何这样的元素,它可能会抛出一个SAXParseException:未终止的实体参考 。

他们已经为Maps推出了一个新的API。它可用here

我自己下载了kml文件,并将其存储在设备中。当我使用编辑器查看它 时,我没有找到我的代码正在寻找的元素。但是,如果您使用kml文件在最新的Chrome版本中查找路线,则该路线有效。

在我的情况下,这个问题出现在/ res/drawable文件夹中的.png文件中。这是一个错误,它被报告为here。所以,为了将来的参考,如果你正在面对一个drawable,请检查一下。总结一下,更新你的ADT,至少是版本21.0.1。

+9

您的问题可以通过清理项目构建(Project | Clean ... |并选择清理项目)来解决。 – Aryo 2013-01-09 12:38:33

+0

谢谢,这对我有帮助。如果干净的项目不起作用,则尝试通过右键单击并打开一个.png文件,然后选择“使用 - 在位编辑器打开”。关闭编辑器窗口后,错误消失了。 – 2013-03-12 16:12:25

我得到了同样的问题。它在一个.png图像文件中。编辑文件后出现问题。我搜索了解决方案,但在此之后,我使用“项目”选项卡下的“clean ..”选项清理了我的项目。所以最后我摆脱这“

我也遇到了同样的问题。经过调试,我发现,它是由‘&’性格造成的。它应该被转义

+0

我有同样的问题,取代&为&在我的XML解决了它,谢谢 – 2014-05-28 20:56:55

+0

当我不发布字符串与“&”一切都很好。我的问题是我如何在发送请求之前转义java中的字符。 – TWeeKeD 2017-05-23 01:49:40