Java Android-将外部XML文件中的元素存储在ArrayList中

Java Android-将外部XML文件中的元素存储在ArrayList中,java,android,xml,arraylist,Java,Android,Xml,Arraylist,我在互联网上看到过可以实现这一点的代码,但是因为我对安卓非常陌生,这让我很困惑 我只需要一段简单的代码来检索给定URL的XML文件,并将给定标记(例如,Name1)中的所有数据存储在字符串数组列表中 最简单的方法是什么 编辑: 在XML文件中,将有几个名称标记,例如。, Name1。。。 名字2。。。 … 我需要存储名称1,名称2,。。。在一个ArrayList尝试XmlPullParser,Android开发者网站提供了一些很好的示例代码来帮助您入门:试试这个 NetActivity.java

我在互联网上看到过可以实现这一点的代码,但是因为我对安卓非常陌生,这让我很困惑

我只需要一段简单的代码来检索给定URL的XML文件,并将给定标记(例如,
Name1
)中的所有数据存储在字符串数组列表中

最简单的方法是什么

编辑: 在XML文件中,将有几个名称标记,例如。,
Name1。。。
名字2。。。
…


我需要存储名称1,名称2,。。。在一个
ArrayList
尝试
XmlPullParser
,Android开发者网站提供了一些很好的示例代码来帮助您入门:

试试这个

NetActivity.java

package com.example.xmlparsingasync;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class NetActivity extends Activity {

String url = "http://api.androidhive.info/pizza/?format=xml";

// Progress dialog
ProgressDialog pDialog;

ArrayList<String> title;

ListView list;

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_net);

list = (ListView) findViewById(R.id.list);
title = new ArrayList<String>();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
new XmlParsing(url).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new String[]{null});
else
new XmlParsing(url).execute(new String[]{null});

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

public class XmlParsing extends AsyncTask<String, Void, String> {

// variables passed in:
   String urls;
   // constructor
   public XmlParsing(String urls) {
       this.urls = urls;
   }

   @Override
protected void onPreExecute() {
    pDialog = ProgressDialog.show(NetActivity.this, "Fetching Details..", "Please wait...", true);
   }


   @Override
protected String doInBackground(String... params) {
    // TODO Auto-generated method stub

    URL url;
    try {

    url = new URL(urls);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(url.openStream()));

doc.getDocumentElement().normalize();

NodeList nodeList = doc.getElementsByTagName("item");

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

Node node = nodeList.item(i);

Element fstElmnt = (Element) node;
NodeList nameList = fstElmnt.getElementsByTagName("name");
Element nameElement = (Element) nameList.item(0);
nameList = nameElement.getChildNodes();
title.add(""+ ((Node) nameList.item(0)).getNodeValue());

System.out.println("name : "+((Node) nameList.item(0)).getNodeValue());

}

} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


return null;
}

   @Override
        protected void onPostExecute(String result) {
            if (pDialog.isShowing())
                pDialog.dismiss();

            list.setAdapter(new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_list_item_1,title));
        }

}
}


And this is our activity xml

activity_net.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >   
    <ListView 
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
                >        
    </ListView>


</LinearLayout>
NetActivity.java
包com.example.xmlparsingsync;
导入java.io.IOException;
导入java.net.MalformedURLException;
导入java.net.URL;
导入java.util.ArrayList;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
导入org.w3c.dom.Node;
导入org.w3c.dom.NodeList;
导入org.xml.sax.InputSource;
导入org.xml.sax.SAXException;
导入android.os.AsyncTask;
导入android.os.Build;
导入android.os.Bundle;
导入android.annotation.TargetApi;
导入android.app.Activity;
导入android.app.ProgressDialog;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.Menu;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
公共类NetActivity扩展了活动{
字符串url=”http://api.androidhive.info/pizza/?format=xml";
//进度对话框
ProgressDialog;
ArrayList标题;
列表视图列表;
@TargetApi(构建版本代码蜂窝)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_net);
list=(ListView)findViewById(R.id.list);
title=新的ArrayList();
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.HONEYCOMB)
新的XmlParsing(url).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,新字符串[]{null});
其他的
新建XmlParsing(url).execute(新字符串[]{null});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
公共类XmlParsing扩展了异步任务{
//传入的变量:
字符串URL;
//建造师
公共XML解析(字符串URL){
this.url=url;
}
@凌驾
受保护的void onPreExecute(){
pDialog=ProgressDialog.show(NetActivity.this,“正在获取详细信息…”,“请稍候…”,true);
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
//TODO自动生成的方法存根
网址;
试一试{
url=新url(url);
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse(新的输入源(url.openStream());
doc.getDocumentElement().normalize();
NodeList NodeList=doc.getElementsByTagName(“项目”);
for(int i=0;i
我目前没有时间完全测试这段代码,但是这段代码似乎没有将所有
标记的数据存储在ArrayList中(尽管我可能错了)。另外,XmlParsing类中有几行代码试图访问Classic之外的变量,我因为这个注释否决了您的问题@“哈里已经为你付出了他的时间,你真的应该花点时间来尊重这一点。@jobi,也许我的措辞不太好,但我并不是有意对哈里无礼。”。我只是告诉他代码中有一些错误。关于ArrayList的那部分可能是我的错vague@Hari,您能否编辑您的代码,以便它将所有的名称标记存储在ArrayList中?我编辑了我的问题,使之成为现实clearer@sticks我编辑了我的ans签出。。。您可以在listview中获得显示的所有名称标记。。。