简体   繁体   English

我如何访问arraylist中的列表元素

[英]How can i access list elements in arraylist

I am parsing xml from web service, i want to use xml values as a arraylist 我正在从Web服务解析xml,我想使用xml值作为arraylist

 eElement.getElementsByTagName(Lyr_NAME) values are  Traffic , Satellite , Hybrid , Satellite 2

 eElement.getElementsByTagName(Lyr_URL) values are  url1 , url2 , url3, url4

Lyr_LAYER_TYPE and Lyr_FIELD has 4 elements Lyr_LAYER_TYPELyr_FIELD有4个元素

         List<String> LayerNames = new ArrayList<String>();

         for (int i = 0; i < nl.getLength(); i++) {

        Node nNode = nl.item(i);
        if (nNode.getNodeType() == Node.ELEMENT_NODE) {

            Element eElement = (Element) nNode;

            LayerNames.add(0, eElement.getElementsByTagName(Lyr_NAME).item(0).getTextContent());
            LayerNames.add(1,eElement.getElementsByTagName(Lyr_URL).item(0).getTextContent());
            LayerNames.add(2,eElement.getElementsByTagName(Lyr_LAYER_TYPE).item(0).getTextContent());
            LayerNames.add(3,eElement.getElementsByTagName(Lyr_FIELD).item(0).getTextContent());

        }

    }

Layer values are coming rapidly. 图层值正在快速增长。 But when i use get to access elements in arraylist it always return Lyr_NAME elements, then when i write LayerNames[0] Android Studio didn't resolve type. 但是,当我使用get来访问arraylist中的元素时,它总是返回Lyr_NAME元素,然后当我编写LayerNames[0] Android Studio无法解析类型。 My log is; 我的日志是

    Log.e("Array List Result",LayerNames.get(0));

My question is how can i access to Lyr_URL , Lyr_TYPE or Lyr_FIELD ;? 我的问题是如何访问Lyr_URLLyr_TYPELyr_FIELD

Thanks in advance 提前致谢

You cannot get in List. 您无法进入列表。 You can use Map. 您可以使用地图。

Map<String,String> LayerNames = new HashMap<String,String>();
        for (int i = 0; i < nl.getLength(); i++) {
            Node nNode = nl.item(i);
            if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                Element eElement = (Element) nNode;
                LayerNames.put(Lyr_NAME, eElement.getElementsByTagName(Lyr_NAME).item(0).getTextContent());
                LayerNames.put(Lyr_URL,eElement.getElementsByTagName(Lyr_URL).item(0).getTextContent());
                LayerNames.put(Lyr_LAYER_TYPE,eElement.getElementsByTagName(Lyr_LAYER_TYPE).item(0).getTextContent());
                LayerNames.put(Lyr_FIELD,eElement.getElementsByTagName(Lyr_FIELD).item(0).getTextContent());
            }
        }

Log.e("Map Result",LayerNames.get(Lyr_URL)); Log.e(“地图结果”,LayerNames.get(Lyr_URL));

You neet to write get functions into Lyr_NAME classes' and return the attributes of the class with that functions. Lyr_NAMEget函数写入Lyr_NAME类中,然后使用该函数返回该类的属性。 Than, you should add the same functions for the own attributes of Lyr_URL . 然后,您应该为Lyr_URL的自身属性添加相同的功能。 You can just simply: 您可以简单地:

LayerNames.get(0).getLyr_URL().getURL1()
LayerNames.get(0).getTraffic() 
// etc.

By populating arraylist with index, you are overwriting the existing elements and hence you will just left with last elements in the xml if there are multiple tags. 通过使用索引填充arraylist,您将覆盖现有元素,因此,如果有多个标签,您将只剩下xml中的最后一个元素。 Instead you should do something like: 相反,您应该执行以下操作:

for (int i = 0; i < nl.getLength(); i++) {
    Node nNode = nl.item(i);
    if (nNode.getNodeType() == Node.ELEMENT_NODE) {
        Element eElement = (Element) nNode;
        LayerNames.add(eElement.getElementsByTagName(Lyr_NAME).item(0).getTextContent());
        LayerNames.add(eElement.getElementsByTagName(Lyr_URL).item(0).getTextContent());
        LayerNames.add(eElement.getElementsByTagName(Lyr_LAYER_TYPE).item(0).getTextContent());
        LayerNames.add(eElement.getElementsByTagName(Lyr_FIELD).item(0).getTextContent());

    }
}

And then you could do something like: 然后您可以执行以下操作:

for (int i = 0; i<LayerNames.size(); i+=4) {
    for (int j = i; j< i+4;j++) {
         Log.e("Array List Result", LayerNames.get(j));
    }
}

if you think it's just going to be once, then you could do something like: 如果您认为这只是一次,那么您可以执行以下操作:

for (int i = 0; i<LayerNames.size(); i+=4) {
         Log.e("Array List Result", LayerNames.get(j));
}

It will print layer name followed by url followed by layer type followed by field. 它将打印层名称,后跟url,后跟层类型,然后是字段。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM