私はExampleHandler extends from DefaultHandler
という名前のクラスを持っています。Android Xml Handlerは、xmlファイルの最後のオブジェクトのみを保持します
このクラスは、(Web上)外部のXMLファイルからデータを読み込み、このxmlファイルの構造は次のとおりです。
<resultsSet>
<result>
<title>WinRANI Web Services!</title>
<nom>DADI</nom>
<prenom>Morad</prenom>
<adresse>DANS MES REVES</adresse>
</result>
...
</resultsSet>
私は、このxmlファイルと同じ構造を持つクラスを作成しましたが(ParsedExampleDataSet
と呼ばれますそれはゲッターとセッターを持っています)。
すべての 'result'オブジェクトを含むArrayList
も作成しましたが、ハンドラがすべてのオブジェクトを読み込んだときにArrayList
のすべてのアイテムが同じであるという問題があります。
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<ParsedExampleDataSet> myParsedExampleDataSetList = new ArrayList<ParsedExampleDataSet>();
private ParsedExampleDataSet myParsedExampleDataSet = new ParsedExampleDataSet();
private ParsedExampleDataSet s1;
private ParsedExampleDataSet s2;
private ParsedExampleDataSet s3;
private ParsedExampleDataSet s4;
private ParsedExampleDataSet s5;
// ===========================================================
// Getter & Setter
// ===========================================================
public ArrayList<ParsedExampleDataSet> 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:
* <tag>
* Can provide attribute(s), when xml was like:
* <tag attribute="attributeValue">*/
@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:
* </tag> */
@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:
* <tag>characters</tag> */
@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));
}
}
}
私のxmlファイルも他のいくつかのフィールドがあります。
は、ここに私のコードです。
場合!!! Tahnkあなたはとても大変です! 正直、どうもありがとうございます! 私はこのサイトでは新しく、とても役に立ちます! :) –