java - 在 Android 中搜索从 XML 解析的数组

标签 java android xml arrays parsing

我有一个 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/

相关文章:

java - 在 JOOQ 自定义绑定(bind)中生成 SQL 以填充 MySQL JSON 函数时访问字段名称或别名

java - 无法实现通知服务

android - Flutter:如何使用 "Multi Image Picker"降低图像质量并获得输出为 "File"?

java - 在 web.xml 中映射案例

java - 关于我的数组代码

Java 8 API 静态方法在非空输入上运行函数,或返回 nullValue

java - 在 Web 浏览器中运行 Java

java - 四舍五入到 2 位小数并通过 TextView

wpf - 如何为列表框中的项目做数据模板?

javascript - SAPUI5 View 表被切断