【发布时间】:2011-08-19 08:53:50
【问题描述】:
我正在尝试解析一个中等大小的 xml 文件,将其存储在 ArrayList 中,然后在列表视图中显示结果。目前我遇到了问题,但找不到解决方案。首先这是我的 sax 解析器代码:
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean DayofWeek = false;
boolean DateDD = false;
String dayofweek = null;
String datedd = null;
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("Start Element :" + qName);
if (qName.equalsIgnoreCase("DayofWeek")) {
DayofWeek = true;
}
else if (qName.equalsIgnoreCase("Date-DD")) {
DateDD = true;
}
// ommited
}
public void endElement(String uri, String localName,String qName) throws SAXException {
}
public void characters(char ch[], int start, int length) throws SAXException {
if (DayofWeek) {
System.out.println(new String(ch,start,length));
dayofweek = new String(ch, start, length);
DayofWeek = false;
}
else if (DateDD) {
System.out.println(new String(ch,start,length));
datedd = new String(ch, start, length);
DateDD = false;
}
// ommited
else if (dayofweek != null) {
System.out.println("Do i reach here?");
addElement(dayofweek, datedd, datemm, dateyy, time, competition, home, away, venue); //is run
}
}
};
saxParser.parse(is, handler);
} catch (Exception e) {
System.out.println("Sax Error");
Log.w("SaxError", e);
}
}
private void addElement(String dayofweek, String datedd, String datemm, String dateyy, String time, String competition, String home, String away, String venue) {
System.out.println("Add Element");
AddObjectToList(dayofweek, datedd);
}
// Add one item into the Array List
public void AddObjectToList(String dayofweek, String datedd, String datemm, String dateyy, String time, String competition, String home, String away, String venue) {
System.out.println("AddObjectToList");
fixture = new FixtureSupport();
fixture.setDayOfWeek(dayofweek);
fixture.setDateDD(datedd);
itemList.add(fixture);
}
在 logcat 中,这将正确打印所有信息,但不会进入 AddElement 文档,因此列表视图中不会出现任何内容。然而,如果我将所有“else if”语句更改为“if”语句,代码将在列表视图中打印出来,但每个 XML 元素将重复大约 10 次左右(似乎是随机的)。虽然它也会重复自身,但它一次只打印一个 xml 元素,然后逐渐将其他元素添加到其中。
我不明白为什么会这样,请大家帮忙!
谢谢
【问题讨论】:
-
将 else if (dayofweek != null) 替换为 if (dayofweek != null)
-
这允许它显示在列表视图中,这很好,但复制仍在发生。 :-(
-
这是因为您的列表具有重复值,因此在将项目列表传递给适配器之前,请删除重复项。
-
当您说重复时,在 XML 文件本身中重复?