如何访问arraylist中的列表元素

时间:2014-12-19 11:30:13

标签: java android 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_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());

        }

    }

图层值正在迅速增加。但是当我使用get访问arraylist中的元素时,它总是返回Lyr_NAME个元素,然后当我写LayerNames[0]时Android Studio没有解析类型。 我的日志是;

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

我的问题是如何访问Lyr_URLLyr_TYPELyr_FIELD;?

提前致谢

3 个答案:

答案 0 :(得分:0)

你无法进入名单。你可以使用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(&#34; Map Result&#34;,LayerNames.get(Lyr_URL));

答案 1 :(得分:0)

您需要将get个函数写入Lyr_NAME类&#39;并返回具有该函数的类的属性。比,你应该为Lyr_URL的自己的属性添加相同的功能。你可以简单地说:

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

答案 2 :(得分:0)

通过使用索引填充arraylist,您将覆盖现有元素,因此如果有多个标记,您将只留下xml中的最后一个元素。相反,你应该做类似的事情:

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());

    }
}

然后你可以做类似的事情:

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));
    }
}

如果您认为它只是一次,那么您可以执行以下操作:

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

它将打印图层名称,后跟url,后跟图层类型,后跟字段。