androidpull
① 请问怎么用android pull解析web传回的xml文件
2.如果是从网络回传回的XML文件,我更推荐以数据流的方式输入到内存,使用Android的XmlPullParser解析器对其进行解析,下面我写一个简单的例子方便你理解 Person.xml <persons>
<person id="23">
<name>liming</name>
<age>30</age></person><person id="20">
<name>lixiangmei</name>
<age>25</age></person></persons> 使用Pull解析器的逻辑: public static List<Person> getPersons(InputStream inStream) throws Throwable{ //将XML文件以数据流的方式输入
List<Person> persons = null;
Person person = null;
XmlPullParser parser = Xml.newPullParser(); //创建Pull解析器对象实例
parser.setInput(inStream, "UTF-8"); //设置解析的编码格式为utf-8编码
int eventType = parser.getEventType(); //因为可以手动的去获取事件,以控制解析XML文档的过程, //所以我们可以在循环中不断的提取事件,根据事件的类型做相应的逻辑处理
while(eventType!=XmlPullParser.END_DOCUMENT){
switch (eventType) {
case XmlPullParser.START_DOCUMENT: //遇到XML文档的根元素,即<persons>这个标签
persons = new ArrayList<Person>(); //创建person集合break;case XmlPullParser.START_TAG: //遇到XML文档中的标签起始元素
String name = parser.getName();
if("person".equals(name)){
person = new Person();
person.setId(new Integer(parser.getAttributeValue(0)));}if(person!=null){
if("name".equals(name)){
person.setName(parser.nextText());//注意,是获取<person>这个标签的文本信息,调用nextText()这个方法}if("age".equals(name)){
person.setAge(new Short(parser.nextText()));}}break;case XmlPullParser.END_TAG://遇到XML文档中的结束标签元素
if("person".equals(parser.getName())){
persons.add(person);
person = null; //这句话要注意,将这个person类型对象的引用置空,因为在循环中要继续遍历,生成新的person对象}break;}eventType = parser.next(); //不断提取事件}return persons;}
3.以上的Demo虽然小
② 在android中怎么使用pullparse解析.xml文件
Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。
下面我们通过Demo例子来介绍如何使用PULL机制来解析XML文件。先看下如下工程的目录结构:
按以下步骤进行操作:
[1] 新建一个XML文件,命名为student.xml。同时把XML文件放置到assets目录下。student.xml文件的内容如下:
[html] view plain
<?xml version="1.0" encoding="utf-8"?>
<students>
<student id="20110806100">
<name>小明</name>
<age>22</age>
<sex>男</sex>
</student>
<student id="20110806101">
<name>小李</name>
<age>24</age>
<sex>男</sex>
</student>
<student id="20110806102">
<name>小丽</name>
<age>21</age>
<sex>女</sex>
</student>
</students>
[2] 根据XML文件中的节点目录,创建一个相对应的实体类,来保存解析的相应信息。在包:com.andyidea.entity下新建Student.java类。
[html] view plain
package com.andyidea.entity;
public class Student {
private String id;
private String name;
private int age;
private String sex;
public String getId() {
return id;
}
public void setId(String 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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
[3] 定义一个使用PULL解析XML文件的工具类:ParserByPULL.java。
[html] view plain
package com.andyidea.util;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.util.Xml;
import com.andyidea.entity.Student;
public class ParserByPULL {
//采用XmlPullParser来解析XML文件
public static List<Student> getStudents(InputStream inStream) throws Throwable
{
List<Student> students = null;
Student mStudent = null;
//========创建XmlPullParser,有两种方式=======
//方式一:使用工厂类XmlPullParserFactory
XmlPullParserFactory pullFactory = XmlPullParserFactory.newInstance();
XmlPullParser parser = pullFactory.newPullParser();
//方式二:使用Android提供的实用工具类android.util.Xml
//XmlPullParser parser = Xml.newPullParser();
//解析文件输入流
parser.setInput(inStream, "UTF-8");
//产生第一个事件
int eventType = parser.getEventType();
//只要不是文档结束事件,就一直循环
while(eventType!=XmlPullParser.END_DOCUMENT)
{
switch (eventType)
{
//触发开始文档事件
case XmlPullParser.START_DOCUMENT:
students = new ArrayList<Student>();
break;
//触发开始元素事件
case XmlPullParser.START_TAG:
//获取解析器当前指向的元素的名称
String name = parser.getName();
if("student".equals(name))
{
//通过解析器获取id的元素值,并设置student的id
mStudent = new Student();
mStudent.setId(parser.getAttributeValue(0));
}
if(mStudent!=null)
{
if("name".equals(name))
{
//获取解析器当前指向元素的下一个文本节点的值
mStudent.setName(parser.nextText());
}
if("age".equals(name))
{
//获取解析器当前指向元素的下一个文本节点的值
mStudent.setAge(new Short(parser.nextText()));
}
if("sex".equals(name))
{
//获取解析器当前指向元素的下一个文本节点的值
mStudent.setSex(parser.nextText());
}
}
break;
//触发结束元素事件
case XmlPullParser.END_TAG:
//
if("student".equals(parser.getName()))
{
students.add(mStudent);
mStudent = null;
}
break;
default:
break;
}
eventType = parser.next();
}
return students;
}
③ android的消息推送怎么做
android的消息推送办法:1、可以使用轮询(Pull)方式
就是用客户端定时向服务器发送相关的信息,一旦服务器有变化就会马上同步消息。但这种方式对服务器的压力是十分大的,而且比较费客户端的流量,就是不断地向服务器发送请求,但是这样开发很简单。
2、使用持久连接(Push)方式
就是客户端和服务器之间建立起一连接,这样就可以实现消息的及时发送,而且这种方式开发难度大,开发周期较长。但是这是一种最常使用的方式,目前主流的消息推送都是通过这种方式做的。
选择消息推送软件,深圳极光就不错。极光截至2020年12月,已有超169万款APP在使用极光提供的服务。而且专注于为开发者提供稳定高效的消息推送、一键认证以及流量变现等服务,助力开发者的运营、增长与变现。
④ android中xml解析pull与sax有什么区别
android中xml解析pull与sax,可以通过以下介绍了解区别:
1、SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于android等移动设备,SAX全称是Simple API for Xml,既是指一种接口,也是一个软件包,作为接口,sax是事件驱动型xml解析的一个标准接口。具有如下特点1. 解析效率高,占用内存少。2.可以随时停止解析。3.不能载入整个文档到内存。4.不能写入xml5.SAX解析xml文件采用的是事件驱动。
2、Pull解析XML文件的方式与SAX解析XML文件的方式大致相同,他们都是基于事件驱动的,页是Android中默认的解析方式,更适用于移动平台的解析方式。所以,利用pull解析XML文件需要下面几个步骤:1.通过XMLPullParserFactory获取XMLPullParser对象。2.通过XMLPullParser对象设置输入流。3.通过parser.next(),持续的解析XML文件直到文件的尾部。