Ik ben bezig met het schrijven van een Android-app waarbij ik data uit een aantal verschillende bronnen (XML, database, enz) moet kunnen halen. Ik gebruik een HashMap als tussenlaag om data door te kunnen geven van de ene method naar de andere; daar zijn zo zijn redenen voor maar daar ga ik in dit topic liever niet op in aangezien dat wel erg offtopic is. 
Anyway, ik doe het volgende:
In het kort: ik loop door alle <track> tags in mijn XML-document heen en voeg voor elk item een HashMap (track) toe aan een ArrayList (tracks). Debuggen toont aan dat hij inderdaad allevier de child-elements van mijn track-element vindt, echter na afloop van deze loop slaat hij slechts twee van de vier elementen op in de HashMap.
Wat er gebeurt bij het debuggen: track.put() zet het eerste child-element dat hij tegenkomt neer op positie 2 (de derde positie dus) van de interne array van de HashMap. Op de tweede iteratie van de binnenste loop doet hij dat echter nog eens: hij overschrijft de waarde die in de vorige iteratie op positie 2 is neergezet. Tijdens de derde iteratie gebruikt hij positie 3 voor het opslaan van dit child-element, en voor de vierde property gebruikt hij weer positie 2. Dit resulteert erin dat de HashMap waarvan ik zou verwachten dat hij 4 entries heeft er maar 2 heeft.
Kent iemand dit probleem? En wat zou ik moeten doen om het op te lossen?
Anyway, ik doe het volgende:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| NodeList trackNodes = root.getElementsByTagName("track"); List<HashMap<String, String>> tracks = new ArrayList<HashMap<String, String>>(); for (int j = 0; j < trackNodes.getLength(); j++) { Node item = trackNodes.item(j); NodeList trackProperties = item.getChildNodes(); HashMap<String, String> track = new HashMap<String, String>(); for (int k = 0; k < trackProperties.getLength(); k++) { Node trackProperty = trackProperties.item(k); String tpName = trackProperty.getNodeName(); if (trackProperty.hasChildNodes()) track.put(tpName.toLowerCase(), trackProperty.getFirstChild().getNodeValue()); } tracks.add(track); } |
In het kort: ik loop door alle <track> tags in mijn XML-document heen en voeg voor elk item een HashMap (track) toe aan een ArrayList (tracks). Debuggen toont aan dat hij inderdaad allevier de child-elements van mijn track-element vindt, echter na afloop van deze loop slaat hij slechts twee van de vier elementen op in de HashMap.
Wat er gebeurt bij het debuggen: track.put() zet het eerste child-element dat hij tegenkomt neer op positie 2 (de derde positie dus) van de interne array van de HashMap. Op de tweede iteratie van de binnenste loop doet hij dat echter nog eens: hij overschrijft de waarde die in de vorige iteratie op positie 2 is neergezet. Tijdens de derde iteratie gebruikt hij positie 3 voor het opslaan van dit child-element, en voor de vierde property gebruikt hij weer positie 2. Dit resulteert erin dat de HashMap waarvan ik zou verwachten dat hij 4 entries heeft er maar 2 heeft.
Kent iemand dit probleem? En wat zou ik moeten doen om het op te lossen?
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.