2011-02-23 118 views
0

我期待的输出是一个数组列表,其中包含所有项目“思考” ,但相反,每次我将值添加到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 ------ --------

+0

你可以说明这是什么意思this.c.c =新国家();和impl。的阶级国家。? – 2011-02-23 07:29:02

+0

cName是Country类的实例。 Country类包含一个名为“name”的String变量,另一个变量为“Thought”的实例,它本身包含多个字段。 – Avinazz 2011-02-23 08:43:13

回答

2

值的重复是因为this.thought总是指向同一个对象。

因为您正在设置同一个实例的值,您将得到一个ArrayList<Thought>的值,在解析周期中读取最后一个值。

+0

我尝试删除“this”,但输出没有变化。 – Avinazz 2011-02-23 08:46:19

+0

无论你是否写下“这”都是暗示。你需要做的是在每次遇到节点时以及当你得到时将实例化一个新的思想对象,将它放入ArrayList中。 – Samuh 2011-02-23 09:31:25

+0

是的,我知道。我已经尝试过你的下一个建议,但徒劳无功。 – Avinazz 2011-02-23 11:37:57