2016-06-18 12 views
0

Ich habe wirklich für diese gesucht, konnte aber keine Antwort, mein Fall nicht scheint zu weit von der doc und Beispiele, die ich gelesen habe, aber ...
ich Parsen bin nur finden eine XML-Datei mit verschachtelten Elementen mit xmlpullparser und zum Speichern der Daten in einer ArrayList mit benutzerdefinierten Objekten.
Fast alles ist in Ordnung, aber ich am Ende am Ende mit 2x zu vielen Objekten auf ... Von dem, was ich bis jetzt gesammelt haben, das Problem kommt von der Tatsache, dass ein END_TAG Ereignis jedes Mal kurz nach dem START_TAG Ereignisse ausgelöst wird, , dann wird das Parsing fortgesetzt, und ich begegne demselben END_TAG, wo ich es normalerweise sehen sollte.android xmlpullparser erkennt jeden END_TAG zweimal

Hier ist meine Parsing-Schleife:

int eventType = parser.getEventType(); 
while (eventType != XmlPullParser.END_DOCUMENT) { 
    String name; 
    switch (eventType) { 
     case XmlPullParser.START_DOCUMENT: 
      Log.i(TAG, "getLoadedXmlValues __ START_DOCUMENT"); 
      shop = new ArrayList(); 
      break; 
     case XmlPullParser.START_TAG: 
      name = parser.getName(); 
      Log.i(TAG, "getLoadedXmlValues __ START_TAG name = " + name); 
      if (name.equalsIgnoreCase("WELCOME_TEXT")) { 
       waitingScreenText = parser.nextText(); 
       currentContent = waitingScreenText; 
      } else if (name.equalsIgnoreCase("ARTIST")) { 
       //Log.i(TAG, "getLoadedXmlValues __ creating new artist object"); 
       currentArtist = new Artist(); 
      } else if (currentArtist != null) { 
       if (name.equalsIgnoreCase("NAME")) { 
        currentArtist.setName(parser.nextText()); 
        currentContent = currentArtist.getName(); 
        //Log.i(TAG, "getLoadedXmlValues __ artist object exists, setting values. NAME = " + currentArtist.getName()); 
       } else if (name.equalsIgnoreCase("PICTURE")) { 
        currentArtist.setPicture(parser.nextText()); 
        currentContent = currentArtist.getPicture(); 
       } else if (name.equalsIgnoreCase("DESCRIPTION")) { 
        currentArtist.setDescription(parser.nextText()); 
        currentContent = currentArtist.getDescription(); 
       } else if (name.equalsIgnoreCase("TATTOOS")) { 
        currentTattoos = new ArrayList<>(); 
       } else if (name.equalsIgnoreCase("TATTOO")) { 
        currentTattoos.add(parser.nextText()); 
        currentContent = "adding a tattoo"; 
       } else if (name.equalsIgnoreCase("DRAWINGS")) { 
        currentDrawings = new ArrayList<>(); 
       } else if (name.equalsIgnoreCase("DRAWING")) { 
        currentDrawings.add(parser.nextText()); 
        currentContent = "adding a drawing"; 
       } 
       Log.i(TAG, "getLoadedXmlValues __ START_TAG content = " + currentContent); 
      } 
     case XmlPullParser.END_TAG: 
      name = parser.getName(); 
      Log.i(TAG, "getLoadedXmlValues __ END_TAG name = " + name); 
      if (name.equalsIgnoreCase("TATTOOS")&& currentArtist !=null&& currentTattoos !=null) { 
       currentArtist.setTattoos(currentTattoos); 
      } else if (name.equalsIgnoreCase("DRAWINGS")&& currentArtist !=null&& currentDrawings !=null) { 
       currentArtist.setDrawings(currentDrawings); 
      } else if (name.equalsIgnoreCase("ARTIST")&& currentArtist !=null) { 
       //Log.i(TAG, "getLoadedXmlValues __ END_TAG :: add artist to shop"); 
       shop.add(currentArtist); 
      } 
    } 

Hier ist meine xml: (ich eine Datei aus dem Internet herunterladen, dann schreiben Sie seinen Inhalt in einer Datei auf dem internen Speicher mit builder.append(line).append("\n");)

<?xml version="1.0" encoding="utf-8"?> 
<datas> 
    <DATE_CREATED_TIMESTAMP> 
     123456789 
    </DATE_CREATED_TIMESTAMP> 
    <WELCOME_TEXT> 
     Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent venenatis lacus ac est ultrices dictum. Aenean rhoncus finibus turpis, sit amet condimentum augue porta eget. 
    </WELCOME_TEXT> 
    <ARTISTS> 
     <ARTIST> 
      <NAME>artiste 1</NAME> 
      <PICTURE>http://dummy.url/artiste_1/face-1.jpg</PICTURE> 
      <DESCRIPTION>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent venenatis lacus ac est ultrices dictum. Aenean rhoncus finibus turpis, sit amet condimentum augue porta eget.</DESCRIPTION> 
      <TATTOOS> 
       <TATTOO>http://dummy.url/artiste_1/tattoos/a.jpg</TATTOO> 
       <TATTOO>http://dummy.url/artiste_1/tattoos/b.jpg</TATTOO> 
       <TATTOO>http://dummy.url/artiste_1/tattoos/c.jpg</TATTOO> 
       <TATTOO>http://dummy.url/artiste_1/tattoos/d.jpg</TATTOO> 
       <TATTOO>http://dummy.url/artiste_1/tattoos/e.jpg</TATTOO> 
       <TATTOO>http://dummy.url/artiste_1/tattoos/f.jpg</TATTOO> 
      </TATTOOS> 
       <DRAWING>http://dummy.url/artiste_1/dessisn/a.jpg</DRAWING> 
      <DRAWINGS> 
       <DRAWING>http://dummy.url/artiste_1/dessisn/b.jpg</DRAWING> 
       <DRAWING>http://dummy.url/artiste_1/dessisn/c.jpg</DRAWING> 
       <DRAWING>http://dummy.url/artiste_1/dessisn/d.jpg</DRAWING> 
       <DRAWING>http://dummy.url/artiste_1/dessisn/e.jpg</DRAWING> 
       <DRAWING>http://dummy.url/artiste_1/dessisn/f.jpg</DRAWING> 
      </DRAWINGS> 
     </ARTIST> 
     <ARTIST> 
      <NAME>artiste 2</NAME> 
      <PICTURE>http://dummy.url/artiste_2/face-2.jpg</PICTURE> 
      <DESCRIPTION>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent venenatis lacus ac est ultrices dictum. Aenean rhoncus finibus turpis, sit amet condimentum augue porta eget.</DESCRIPTION> 
      <TATTOOS> 
       <TATTOO>http://dummy.url/artiste_2/tattoos/a.jpg</TATTOO> 
       <TATTOO>http://dummy.url/artiste_2/tattoos/b.jpg</TATTOO> 
       <TATTOO>http://dummy.url/artiste_2/tattoos/c.jpg</TATTOO> 
       <TATTOO>http://dummy.url/artiste_2/tattoos/d.jpg</TATTOO> 
       <TATTOO>http://dummy.url/artiste_2/tattoos/e.jpg</TATTOO> 
       <TATTOO>http://dummy.url/artiste_2/tattoos/f.jpg</TATTOO> 
      </TATTOOS> 
      <DRAWINGS> 
       <DRAWING>http://dummy.url/artiste_2/dessisn/a.jpg</DRAWING> 
       <DRAWING>http://dummy.url/artiste_2/dessisn/b.jpg</DRAWING> 
       <DRAWING>http://dummy.url/artiste_2/dessisn/c.jpg</DRAWING> 
       <DRAWING>http://dummy.url/artiste_2/dessisn/d.jpg</DRAWING> 
       <DRAWING>http://dummy.url/artiste_2/dessisn/e.jpg</DRAWING> 
       <DRAWING>http://dummy.url/artiste_2/dessisn/f.jpg</DRAWING> 
      </DRAWINGS> 
     </ARTIST> 
     <ARTIST> 
      <NAME>artiste 3</NAME> 
      <PICTURE>http://dummy.url/artiste_3/face-3.jpg</PICTURE> 
      <DESCRIPTION>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent venenatis lacus ac est ultrices dictum. Aenean rhoncus finibus turpis, sit amet condimentum augue porta eget.</DESCRIPTION> 
      <TATTOOS> 
       <TATTOO>http://dummy.url/artiste_3/tattoos/a.jpg</TATTOO> 
       <TATTOO>http://dummy.url/artiste_3/tattoos/b.jpg</TATTOO> 
       <TATTOO>http://dummy.url/artiste_3/tattoos/c.jpg</TATTOO> 
       <TATTOO>http://dummy.url/artiste_3/tattoos/d.jpg</TATTOO> 
       <TATTOO>http://dummy.url/artiste_3/tattoos/e.jpg</TATTOO> 
       <TATTOO>http://dummy.url/artiste_3/tattoos/f.jpg</TATTOO> 
      </TATTOOS> 
      <DRAWINGS> 
       <DRAWING>http://dummy.url/artiste_3/dessisn/a.jpg</DRAWING> 
       <DRAWING>http://dummy.url/artiste_3/dessisn/b.jpg</DRAWING> 
       <DRAWING>http://dummy.url/artiste_3/dessisn/c.jpg</DRAWING> 
       <DRAWING>http://dummy.url/artiste_3/dessisn/d.jpg</DRAWING> 
       <DRAWING>http://dummy.url/artiste_3/dessisn/e.jpg</DRAWING> 
       <DRAWING>http://dummy.url/artiste_3/dessisn/f.jpg</DRAWING> 
      </DRAWINGS> 
     </ARTIST> 
    </ARTISTS> 
</datas> 

Und hier ist ein Log-Extrakt:

START_DOCUMENT 
START_TAG name = datas 
END_TAG name = datas 
START_TAG name = DATE_CREATED_TIMESTAMP 
END_TAG name = DATE_CREATED_TIMESTAMP 
END_TAG name = DATE_CREATED_TIMESTAMP 
START_TAG name = WAITING_SCREEN 
END_TAG name = WAITING_SCREEN 
START_TAG name = WELCOME_TEXT 
END_TAG name = WELCOME_TEXT 
END_TAG name = WAITING_SCREEN 
START_TAG name = ARTISTS 
END_TAG name = ARTISTS 
START_TAG name = ARTIST 
END_TAG name = ARTIST 
START_TAG name = NAME 
START_TAG content = artiste 1 
END_TAG name = NAME 
START_TAG name = PICTURE 
[...] 

Wie Sie sehen können, egal ob ein Element geschachtelte Elemente enthält oder nicht, bewirkt das öffnende Tag immer das START_TAG und END_TAG ausgelöst zu werden ...
Ich habe versucht, meine lokale XML-Datei zu protokollieren, um es zu überprüfen, und es ist richtig, so dass das Problem hat aus meiner while-Schleife kommen ... ich völlig verloren bin, warum es so ist ...

Antwort

0

fügen sie einfach break; nach jedem case

+0

kann ich nicht glauben, Ich habe so lange in die falsche Richtung geschaut! Vielen Dank! du hast meinen Tag gerettet :) – Shiva