我期待的输出是一个数组列表,其中包含所有项目“思考” ,但相反,每次我将值添加到arraylist时,列表中的前一个值也会用new更新,因此会导致重复。这种行为持续到最后。尽管我通过改变方法取得了成果,但我以前的方法失败仍然困扰着我。任何帮助或指针将非常感激。xmlpullparser(),我的代码有什么问题?
我调试观察:当遇到第二add()方法,而不是仅仅增加一个新的元素ArrayList中,不知何故前一个元素被改变了。
下面是XML片段:
<Thoughts>
<country>
<name>India</name>
<item>
<itemId>1</itemId>
<itemDetailImage>detail.png</itemDetailImage>
<itemImage>image1.png</itemImage>
<itemDesc>Item Description 1</itemDesc>
<itemTitle>Item Title 1</itemTitle>
</item>
<item>
<itemId>2</itemId>
<itemDetailImage>detail2.png</itemDetailImage>
<itemImage>image2.png</itemImage>
<itemDesc>Item Description 2</itemDesc>
<itemTitle>Item Title 2</itemTitle>
</item>
<item>
<itemId>3</itemId>
<itemDetailImage>detail3.png</itemDetailImage>
<itemImage>image3.png</itemImage>
<itemDesc>Item Description 3</itemDesc>
<itemTitle>Item Title 3</itemTitle>
</item>
下面是我的尝试和错误的方法:
private void printAll() throws XmlPullParserException, IOException{
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(false);
XmlPullParser parser = factory.newPullParser();
URL url = new URL("http://192.168.1.3/DefaultXML.xml");
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
parser.setInput(is, null);
int eventType = parser.getEventType();
String name;
while(eventType != parser.END_DOCUMENT){
if(eventType == parser.START_DOCUMENT){
Log.i(TAG,"Start document");
}else if (eventType == parser.START_TAG) {
name = parser.getName();
if(name.equalsIgnoreCase(NAME)){
this.cName = new Country();
this.cName.setName(parser.nextText());
}else if(name.equalsIgnoreCase(ITEM_DESC)){
this.thought.setItemDesc(parser.nextText());
}else if (name.equalsIgnoreCase(ITEM_ID)) {
this.thought.setItemID(parser.nextText());
}else if (name.equalsIgnoreCase(ITEM_DETAIL_IMAGE)) {
this.thought.setItemDetailImage(parser.nextText());
}else if (name.equalsIgnoreCase(ITEM_IMAGE)) {
this.thought.setItemImage(parser.nextText());
}else if (name.equalsIgnoreCase(ITEM_TITLE)) {
this.thought.setItemTitle(parser.nextText());
}
}else if (eventType == parser.END_TAG) {
name = parser.getName();
if(name.equalsIgnoreCase(ITEM)) {
this.cName.setThought(this.thought);
ctry.add(cName);
this.thought = new Thought();
}
}
eventType = parser.next();
}
//Log.i(TAG,"---" + ctry.toString());
}
下面是日志信息,我得到:
02-23 17: 15:30.199:INFO/XmlPullParserActivity(726):启动文档
02-23 17:15:30.299:INFO/XmlPullParserActivity(726):4
02-23 17:15:30.299:INFO/XmlPullParserActivity(726):印度
02-23 17:15:30.299:INFO/XmlPullParserActivity(726):项目说明4
02-23 17:15:30.299: INFO/XmlPullParserActivity(726):detail4.png
02-23 17:15:30.309:INFO/XmlPullParserActivity(726):image4.png
02-23 17:15:30.309:INFO/XmlPullParserActivity(726):Item标题4 --------------
02-23 17:15:30.309:INFO/XmlPullParserActivity(726):4
02-23 17:15:30.309:INFO/XmlPullParserActivity( 726):印度
02-23 17:15:30.309:INFO/XmlPullParserActivity(726):项目描述4
02-23 17:15:30.319:INFO/XmlPullParserActivity(726):detail4.png
02-23 17:15:30.319:INFO/XmlPullParserActivity(726):image4.png
02-23 17:15: 30.319:INFO/XmlPullParserActivity(726):Item Title 4 --------------
02-23 17:15:30.319:INFO/XmlPullParserActivity(726):4
02-23 17:15:30.319:INFO/XmlPullParserActivity(726):India
02-23 17:15:30.329:INFO/XmlPullParserActivity(726):项目说明4
02-23 17:15:30.329:INFO/XmlPullParserActivity 726):detail4.png
02-23 17:15:30.329:INFO/XmlPullParserActivity(726):image4.png
02-23 17:15:30.339:INFO/XmlPullParserActivity(726):Item Title 4 --------------
02-23 17:15:30.339:INFO/XmlPullParserActivity( 726):4
02-23 17:15:30.339:INFO/XmlPullParserActivity(726):印度
02-23 17:15:30.349:INFO/XmlPullParserActivity(726):项目说明4
02-23 17 :15:30.349:INFO/XmlPullParserActivity(726):detail4.png
02-23 17:15:30.349:INFO/XmlPullParserActivity(726):image4.png
02-23 17:15:30.349:INFO/XmlPullParserActivity (726):Item Title 4 --------------
02-23 17:15:30.349:INFO/XmlPullParserActivity(726):4
02-23 17:15:30。349:INFO/XmlPullParserActivity(726):澳大利亚
02-23 17:15:30.349:INFO/XmlPullParserActivity(726):项目说明4
02-23 17:15:30.349:INFO/XmlPullParserActivity(726):detail4 .png
02-23 17:15:30.349:INFO/XmlPullParserActivity(726):image4.png
02-23 17:15:30.349:INFO/XmlPullParserActivity(726):Item Title 4 ------ --------
你可以说明这是什么意思this.c.c =新国家();和impl。的阶级国家。? – 2011-02-23 07:29:02
cName是Country类的实例。 Country类包含一个名为“name”的String变量,另一个变量为“Thought”的实例,它本身包含多个字段。 – Avinazz 2011-02-23 08:43:13