我有一个 XML 文件,我将其解析为 ArrayList
在此 ArrayList 中,我有国家/地区以及其中国家/地区的警报号码。
我想搜索一个国家并找到它的警察、救护车或消防车。数量。
这是可以帮助您的代码。
将 XML 解析为 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;
}
使用警报号码的方法:
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();
}
}
所以我有土地代码,我想在 ArrayList diensten 中搜索属于土地代码的数字。
我该怎么做?
最佳答案
现在你已经有了一个 Alarmdiensten 对象的 ArrayList。我建议您可能希望将其更改为 map ,以便存储土地代码与 Alarmdiensten 对象的 map 。
这样,您就可以使用土地代码从 map 中获取 Alarmdiensten,然后只需在 Alarmdiensten 对象上调用 getPolitie() 等方法即可。
我会确保您封装了 Alarmdiensten 对象,顺便说一句,直接访问它的私有(private)成员是有点禁忌:)
所以类似:
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;
}
从 map 中获取条目
Alarmdiensten land = alarmNumbersForCountries.get(landcode);
YMMV 的另一个要点是,您可能希望从 XML 解析中分离出构建 Alarmdiensten 对象的方法部分。 “每种方法都应该做一件事,做好一件事。”
关于java - 在 Android 中搜索从 XML 解析的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4333892/