我正在从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
和Lyr_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_URL
,Lyr_TYPE
或Lyr_FIELD
;?
提前致谢
答案 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,后跟图层类型,后跟字段。