Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid Xml Handler keeps only the last objects in my xml file
    text
    copied!<p>I have a class named <code>ExampleHandler extends from DefaultHandler</code>.</p> <p>This class reads data from an external xml file (on the web) the structure of this xml file is :</p> <pre><code>&lt;resultsSet&gt; &lt;result&gt; &lt;title&gt;WinRANI Web Services!&lt;/title&gt; &lt;nom&gt;DADI&lt;/nom&gt; &lt;prenom&gt;Morad&lt;/prenom&gt; &lt;adresse&gt;DANS MES REVES&lt;/adresse&gt; &lt;/result&gt; ... &lt;/resultsSet&gt; </code></pre> <p>I've created a class with the same structure of this xml file called <code>ParsedExampleDataSet</code> (it has getters and setters).</p> <p>I've also created an <code>ArrayList</code> which will contain all the 'result' objects but the problem is that when the handler reads all the objects, all items in the <code>ArrayList</code> are the same.</p> <p>Here is my code :</p> <pre><code>package com.example.helloandroid; import java.util.ArrayList; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import android.util.Log; public class ExampleHandler extends DefaultHandler{ // =========================================================== // Fields // =========================================================== private boolean in_resultset = false; private boolean in_result = false; private boolean in_title = false; private boolean in_nom = false; private boolean in_prenom = false; private boolean in_adresse = false; private boolean in_tel = false; private boolean in_fax = false; private boolean in_lon = false; private boolean in_lat = false; private boolean in_description = false; private boolean in_infos = false; private test t; private int currentIndex = 0; ParsedExampleDataSet[] p = new ParsedExampleDataSet[5]; private ArrayList&lt;ParsedExampleDataSet&gt; myParsedExampleDataSetList = new ArrayList&lt;ParsedExampleDataSet&gt;(); private ParsedExampleDataSet myParsedExampleDataSet = new ParsedExampleDataSet(); private ParsedExampleDataSet s1; private ParsedExampleDataSet s2; private ParsedExampleDataSet s3; private ParsedExampleDataSet s4; private ParsedExampleDataSet s5; // =========================================================== // Getter &amp; Setter // =========================================================== public ArrayList&lt;ParsedExampleDataSet&gt; getParsedData() { return this.myParsedExampleDataSetList; } // =========================================================== // Methods // =========================================================== @Override public void startDocument() throws SAXException { this.myParsedExampleDataSet = new ParsedExampleDataSet(); } @Override public void endDocument() throws SAXException { // Nothing to do } /** Gets be called on opening tags like: * &lt;tag&gt; * Can provide attribute(s), when xml was like: * &lt;tag attribute="attributeValue"&gt;*/ @Override public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { if (localName.equals("resultset")) { this.in_resultset = true; }else if (localName.equals("result")) { this.in_result = true; }else if (localName.equals("title")) { this.in_title = true; }else if (localName.equals("nom")) { // Extract an Attribute //String attrValue = atts.getValue("thenumber"); //int i = Integer.parseInt(attrValue); //myParsedExampleDataSet.setExtractedInt(i); this.in_nom = true; }else if (localName.equals("prenom")) { this.in_prenom = true; }else if (localName.equals("tel")) { this.in_tel = true; }else if (localName.equals("fax")) { this.in_fax = true; }else if (localName.equals("lon")) { this.in_lon = true; }else if (localName.equals("lat")) { this.in_lat = true; }else if (localName.equals("description")) { this.in_description = true; }else if (localName.equals("infos")) { this.in_infos = true; } } /** Gets be called on closing tags like: * &lt;/tag&gt; */ @Override public void endElement(String namespaceURI, String localName, String qName) throws SAXException { if (localName.equals("resultset")) { this.in_resultset = false; }else if (localName.equals("result")) { this.in_result = false; myParsedExampleDataSetList.add(myParsedExampleDataSet); }else if (localName.equals("title")) { this.in_title = false; }else if (localName.equals("nom")) { // Nothing to do here this.in_nom = false; }else if (localName.equals("prenom")) { this.in_prenom = false; }else if (localName.equals("tel")) { this.in_tel = false; }else if (localName.equals("fax")) { this.in_fax = false; }else if (localName.equals("lon")) { this.in_lon = false; }else if (localName.equals("lat")) { this.in_lat = false; }else if (localName.equals("description")) { this.in_description = false; }else if (localName.equals("infos")) { this.in_infos = false; } } /** Gets be called on the following structure: * &lt;tag&gt;characters&lt;/tag&gt; */ @Override public void characters(char ch[], int start, int length) { if(this.in_title){ myParsedExampleDataSet.setExtractedTitle(new String(ch, start, length)); }else if (this.in_nom){ myParsedExampleDataSet.setExtractedNom(new String(ch,start, length)); }else if (this.in_prenom){ myParsedExampleDataSet.setExtractedPrenom(new String(ch,start, length)); }else if (this.in_tel){ myParsedExampleDataSet.setExtractedTel(new String(ch,start, length)); }else if (this.in_fax){ myParsedExampleDataSet.setExtractedFax(new String(ch,start, length)); }else if (this.in_lon){ myParsedExampleDataSet.setExtractedLon(new String(ch,start, length)); }else if (this.in_lat){ myParsedExampleDataSet.setExtractedLat(new String(ch,start, length)); }else if (this.in_description){ myParsedExampleDataSet.setExtractedDescription(new String(ch,start, length)); }else if (this.in_infos){ myParsedExampleDataSet.setExtractedInfos(new String(ch,start, length)); } } } </code></pre> <p>My xml file also has some other fields.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload