2010-12-02 9 views
0

analysiert wird, ich habe diese XML-Datei, die ich in einen Arraylist analysiereSuche in einem Array, das aus einem XML in Android

In dieser Arraylist Ich habe Länder und die alarmnumbers für die Länder darin.

Ich möchte in ein Land suchen und es ist Polizei, Krankenwagen oder Firedep. Nummer.

Hier ist der Code, um Ihnen zu helfen.

Parsen von XML in Arraylist:

protected ArrayList<Alarmdiensten> getAlarmdiensten() { 
    ArrayList<Alarmdiensten> lijst = new ArrayList<Alarmdiensten>(); 
    try { 
     DocumentBuilder builder =DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
     Document doc = builder.parse(getAssets().open("alarmdiensten.xml")); 
     NodeList nl = doc.getElementsByTagName("land"); 
     for (int i=0;i<nl.getLength();i++) { 
     Node node = nl.item(i); 
     Alarmdiensten land = new Alarmdiensten(); 

       land.land = Xml.innerHtml(Xml.getChildByTagName(node, "naam")); 
     land.landcode = Xml.innerHtml(Xml.getChildByTagName(node, "code")); 
     land.politie = Xml.innerHtml(Xml.getChildByTagName(node, "politie")); 
     land.ambulance = Xml.innerHtml(Xml.getChildByTagName(node, "ambulance")); 
     land.brandweer = Xml.innerHtml(Xml.getChildByTagName(node, "brandweer")); 
     land.telamba = Xml.innerHtml(Xml.getChildByTagName(node, "telamba")); 
     land.adresamba = Xml.innerHtml(Xml.getChildByTagName(node, "adresamba")); 

     lijst.add(land); 
     } 
    } catch (Exception e) {; 
    } 
    return lijst; 
    } 

Die Methode, die die alarmnumbers verwenden:

public void AlarmMenu(){ 
    String landcode; 
     ArrayList<Alarmdiensten> diensten = getAlarmdiensten(); 
    if(fakelocation = true) { 
     landcode = sfakelocation; 
    } 
    else { 
     try { 
    landcode = getAddressForLocation(this, locationNow).getCountryCode(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
    } 

So habe ich die landcode, und ich möchte in der Arraylist diensten für die Zahlen suchen, gehören mit dem Landcode.

Wie kann ich das tun?

Antwort

1

Nun, im Moment haben Sie eine ArrayList von Alarmdiensten Objekte. Ich würde vorschlagen, dass Sie dies möglicherweise in eine Karte ändern möchten, so dass Sie eine Karte mit Landcodes gegen Ihre Alarmdiensten-Objekte speichern.

Auf diese Weise können die Alarmdiensten aus der Karte erhalten die landcode verwenden und dann rufen Sie einfach die getPolitie() etc Methoden auf Ihrem Alarmdiensten Objekt.

Ich würde sicherstellen, dass Sie kapseln Ihre Alarmdiensten BTW-Objekt, den Zugriff auf direkt private Mitglieder ist ein bisschen ein no-no :)

So etwas wie:

protected Map<String, Alarmdiensten> getAlarmdiensten() 
{ 
    Map<String, Alarmdiensten> alarmNumbersForCountries 
              = new HashMap<String, Alarmdiensten>(); 

    try 
    { 
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
    Document doc = builder.parse(getAssets().open("alarmdiensten.xml")); 
    NodeList nl = doc.getElementsByTagName("land"); 
    for (int i = 0; i < nl.getLength(); i++) 
    { 
     Node node = nl.item(i); 
     Alarmdiensten land = new Alarmdiensten(); 

     land.setLand(Xml.innerHtml(Xml.getChildByTagName(node, "naam"))); 
     land.setLandcode(Xml.innerHtml(Xml.getChildByTagName(node, "code"))); 
     land.setPolitie(Xml.innerHtml(Xml.getChildByTagName(node, "politie"))); 
     land.setAmbulance(Xml.innerHtml(Xml.getChildByTagName(node, "ambulance"))); 
     land.setBrandweer(Xml.innerHtml(Xml.getChildByTagName(node, "brandweer"))); 
     land.setTelamba(Xml.innerHtml(Xml.getChildByTagName(node, "telamba"))); 
     land.setAdresamba(Xml.innerHtml(Xml.getChildByTagName(node, "adresamba"))); 

     alarmNumbersForCountries.put(land.getLandCode(), land); 
    } 
    } 
    catch (Exception e) 
    { 
    // Handle Exception 
    } 
    return alarmNumbersForCountries; 
} 

den Eintrag erhalten aus der Karte

Alarmdiensten land = alarmNumbersForCountries.get(landcode); 

Ein weiterer YMMV Punkt ist, dass Sie den Teil des Verfahrens aufzuschlüsseln mögen, dass Alarmdienste Objekte aus der XML-Analyse erstellt. "Jede Methode sollte eine Sache und eine gut tun." Ich

+0

Ja, das funktioniert! Bedankt :) – Galip

+0

@Galip Gern geschehen! –

1

Verwendung einer for-Schleife und die Suche nach es

for(Alarmdiensten land :diensten){ 
     if(land.landcode.equals(landcode)){ 
      // yes i got it, The current land. 
      break; 
     } 
    } 
1

Nur über die Liste iterieren:

String landcode = getLandCode(); 
for (Alarmdiensten dienst:diensten) { 
    if (dienst.landcode.equals(landcode)) { 
    // do what has to be done 
    } 
} 

Betrachten wir eine Karte statt einer Liste verwenden, wenn Sie mehr die Werte zum Nachschlagen haben häufig :

Map<String, List<Alarmdiensten>> servicesInCountry 
        = new HashMap<String, List<Alarmdiensten>>(); 
for (Alarmdiensten dienst:diensten) { 
    List<Alarmdiensten> list = servicesInCountry.get(dienst.landcode); 
    if (list == null) { 
    list = new ArrayList<Alarmdiensten>(); 
    servicesInCountry.put(dienst.landcode, list); 
    } 
    list.add(dienst); 
} 

// ... and later on 
List<Alarmdiensten> servicesInSweden = servicesInCountry.get("SWE"); 
+0

Tnx verwendet das Beispiel Map-Beispiel Martijd zur Verfügung gestellt und es funktioniert :) – Galip

Verwandte Themen