我有下面的XML SAX处理程序:
private class GetXML_Handler extends DefaultHandler {
int x = 0;
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
Log.i("DataHandler", "Start of XML element");
int y = 0;
if (qName.equals("polygon")) {
locations.add(x, new ArrayList<location>());
String coordinates = attributes.getValue("coordinates");
String[] parts = coordinates.split(",");
System.out.println("Cyklus zacaty");
locations.get(x).add(y, new location(Double.parseDouble(parts[0]), Double.parseDouble(parts[1])));
for(int i = 2; i <= parts.length; i = i + 2){
y++;
double Latitude = Double.parseDouble(parts[i].substring(2));
double Longitude = Double.parseDouble(parts[i+1]);
locations.get(x).add(y, new location(Latitude, Longitude));
}
System.out.println("cyklus skonceny");
x++;
}
}
}
然而,“cyklus zacaty”永远不会被打印出来。如果我在String[] parts = coordinates.split(",")
之前移动它,它打印好。那些字符串很大(就像350个GPS坐标)所以java可能无法处理它并且它停止(毫无例外)。
此外,我的“XML元素开始”仅打印5次(直到第一个坐标),但是如果我删除这个拆分方法,它会打印28次(我的XML元素的数量)。我确信我的XML处理程序正常工作(它只是关于这些字符串的东西)。
XML的结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<oblasti>
<oblast>
<nazovOblasti>VT</nazovOblasti>
<polygon>
<coordinates>
132456,4658789,0 56487,4864684
</coordinates>
</polygon>
....
有什么建议吗?
先谢谢
答案 0 :(得分:1)
Attributes参数不包含节点的子元素,只包含分配给节点的属性(如果有)。因此,attributes.getValue("coordinates")
没有按照您的期望行事。
答案 1 :(得分:0)
我认为你的问题不是分裂方法,而是这一行:
locations.get(x).add(y, new location(Double.parseDouble(parts[0]), Double.parseDouble(parts[1])));
,原因是因为字符串有空格,并且它们在拆分后保留,因此无法解析。
在拆分之后和其他任何事情之前尝试这个:
for (i=0; i<parts.length(); i++){
parts[i].trim();
}
当发生异常时,有时它会在最后一行完全执行之前中断线程,特别是如果它是控制台输出。它让我疯了太多次。这可能是您的打印线未显示的原因。