目标效果:
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;
}
@Override
public 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(); //实例化person
id = 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(){
@Override
public 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地址。