Android-PullParser解析xml文件

来源:互联网 发布:生也有涯 知也无涯 编辑:程序博客网 时间:2024/06/06 16:41

目标效果:

MyEclipse中一个项目的xml文件,经过解析显示到eclipse的logcat日志中。


1.打开MyEclipse,新建Web Project项目MyAndroid,并且在根目录WebRoot下新建persons.xml页面。

persons.xml页面:

<?xml version="1.0" encoding="UTF-8"?><persons>   <person id="1">      <name>zhangsan</name>      <age>20</age>   </person>   <person id="2">      <name>lisi</name>      <age>24</age>   </person></persons>


2.运行MyAndroid项目。


3.eclipse中创建Android项目。


4.新建Person实体类,与xml文件中的标签相对应。
Person.java页面:
package com.example.pullparsertest.entity;public class Person {    private int id;    private String name;    private int age;    public Person() {super();}public Person(int id, String name, int age) {super();this.id = id;this.name = name;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";}}


5.新建PersonDao类,用于对标签进行解析。
PersonDao.java页面:
package com.example.pullparsertest.dao;import java.io.StringReader;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserFactory;import android.util.Log;import com.example.pullparsertest.entity.Person;public class PersonDao {   public List<Person> getPersons(String response){   List<Person> persons=null;   try {XmlPullParserFactory factory = XmlPullParserFactory.newInstance();XmlPullParser xmlPullParser = factory.newPullParser();xmlPullParser.setInput(new StringReader(response));    //获取数据源int eventType = xmlPullParser.getEventType();      //获取事件类型int id = 0;String name = "";int age = 0;Person person = null;while (eventType != XmlPullParser.END_DOCUMENT) {String nodeName = xmlPullParser.getName();      //当前读到的标签switch (eventType) {// 开始解析整个文档case XmlPullParser.START_DOCUMENT:persons = new ArrayList<Person>();break;// 开始解析某个结点case XmlPullParser.START_TAG: {       //读取某个标签if ("person".equals(nodeName)) {person = new Person();        //实例化personid = Integer.parseInt(xmlPullParser.getAttributeValue(0));person.setId(id);            //封装peron对象的id属性} else if ("name".equals(nodeName)) {name = xmlPullParser.nextText();     //通过nextText获取文本节点值person.setName(name);        //封装name} else if ("age".equals(nodeName)) {age = Integer.parseInt(xmlPullParser.nextText());person.setAge(age);}break;}// 完成解析某个结点case XmlPullParser.END_TAG: {if ("person".equals(nodeName)) {persons.add(person);      //读完一个person,将其添加到集合person = null;Log.i("MainActivity", "id is " + id);Log.i("MainActivity", "name is " + name);Log.i("MainActivity", "age is " + age);}break;}default:break;}eventType = xmlPullParser.next();}} catch (Exception e) {e.printStackTrace();}      return persons;   }} 


6.MainActivity.java页面连接资源并获取数据。
MainActivity.java页面:
package com.example.pullparsertest;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.util.Log;import com.example.pullparsertest.dao.PersonDao;import com.example.pullparsertest.entity.Person;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        sendRequestWithHttpURLConnection();    }    protected void sendRequestWithHttpURLConnection() {new Thread(){@Overridepublic void run() {URL url;HttpURLConnection connection=null;   //访问请求try {url=new URL("http://192.168.137.1:8080/MyAndroid/persons.xml");     //访问地址connection = (HttpURLConnection) url.openConnection();    //获取到connection实例connection.setRequestMethod("GET");       //请求所使用的方法,GET希望从服务器那里获取数据,POST希望提交数据给服务器connection.setConnectTimeout(8000);      //设置连接毫秒数connection.setReadTimeout(8000);         //设置读取超时的毫秒数InputStream in = connection.getInputStream();      //获取到服务器返回的输入流// 下面对获取到的输入流进行读取BufferedReader reader = new BufferedReader(new InputStreamReader(in));StringBuilder response = new StringBuilder();String line;while ((line = reader.readLine()) != null) {response.append(line);}   Log.i("MainActivity","response="+response);PersonDao personDao=new PersonDao();personDao.getPersons(response.toString());} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if (connection != null) {connection.disconnect();}}}}.start();}    }


7.AndroidManifest.xml页面添加网络访问权限,可以在Permissions进行选择,也可以使用代码方式添加。
</manifest>标签上方:
<uses-permission android:name="android.permission.INTERNET"/>


8.activity_main.xml页面不做处理。


9.要注意的是,获取连接时定义的url路径,标准格式为“http://电脑ip地址:8080/项目名称/xml文件名称”,当使用真机测试时,必须保证手机和电脑的网络相互连接,可以电脑开wifi手机连接上,使用这个网络的ip地址。







0 0
原创粉丝点击