Android的xml序列化代码,Android中Junit测试、XML的序列化与解析

Android中Junit测试、XML的序列化与解析

一、关于Junit测试

首先需要在manifest.xml中配置,在manifest节点下指定以下信息其中targetPacketage是你想要测试的项目的包名

android:name="android.test.InstrumentationTestRunner"

android:targetPackage="com.itheima28.junittest" >

在application节点下加入

使用时直接继承AndroidTestCase即可

public class TestCase extends AndroidTestCase {

public void test() {

。。。。

}

}

二、使用XmlSerializer类序列化XML

XmlSerializer主要是以数据流的形式序列化XML而它是一个接口无法直接实例化,需要通过一个静态方法Xml.newSerializer获取对象

下面是一些常用的方法

startDocument(String,boolean):第一个参数设置文档的编码格式,第二个参数设置是否是一个独立的文档,一般设置为true。

endDocument():标记XML文档的结束,XML文档标签均为成对出现,有始有终。

startTag(String,String):一个XML标签的开始,第一个参数为命名空间,一般为null即可,第二个参数为标签名。

endTag(String,String):一个XML标签的结束,第一个参数为命名空间,一般为null即可,第二个参数为标签名,有始有终。

attribute(String,String,String):设置一个标签的属性,第一个参数为命名空间,第二个参数是属性名,第三个参数为属性值。

text(String/...):设置标签的值

下面是一个实例

public class TestCase extends AndroidTestCase {

public void test() {

// writeXmlToLocal();

List personList = parserXmlFromLocal();

for (Person person : personList) {

Log.i("TestCase", person.toString());

}

}

/**

* 写xml文件到本地

*/

private void writeXmlToLocal() {

List personList = getPersonList();

// 获得序列化对象

XmlSerializer serializer = Xml.newSerializer();

try {

File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");

FileOutputStream fos = new FileOutputStream(path);

// 指定序列化对象输出的位置和编码

serializer.setOutput(fos, "utf-8");

serializer.startDocument("utf-8", true); // 写开始 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>

serializer.startTag(null, "persons"); //

for (Person person : personList) {

// 开始写人

serializer.startTag(null, "person"); //

serializer.attribute(null, "id", String.valueOf(person.getId()));

// 写名字

serializer.startTag(null, "name"); //

serializer.text(person.getName());

serializer.endTag(null, "name"); //

// 写年龄

serializer.startTag(null, "age"); //

serializer.text(String.valueOf(person.getAge()));

serializer.endTag(null, "age"); //

serializer.endTag(null, "person"); //

}

serializer.endTag(null, "persons"); //

serializer.endDocument(); // 结束

} catch (Exception e) {

e.printStackTrace();

}

}

private List getPersonList() {

List personList = new ArrayList();

for (int i = 0; i < 30; i++) {

personList.add(new Person(i, "wang" + i, 18 + i));

}

return personList;

}

}

三、使用pull解析XML

PULL解析器的运行方式和SAX解析器很相似,都是事件触发机制。如开始元素和结束元素,使用parser.next()可以进行下一个元素并触发相应的事件,事件作为代码被发送,返回值是数字,因此可以用一个switch语句来对事件进行选择,然后进行相应的处理,当开始解析元素的时候,调用parser.nextText()方法可以获得下一个Text类型的元素。

常用属性

START_DOCUMENT

START_TAG

TEXT

END_TAG

END_DOCUMENT

private List parserXmlFromLocal() {

try {

File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");

FileInputStream fis = new FileInputStream(path);

// 获得pull解析器对象

XmlPullParser parser = Xml.newPullParser();

// 指定解析的文件和编码格式

parser.setInput(fis, "utf-8");

int eventType = parser.getEventType(); // 获得事件类型

List personList = null;

Person person = null;

String id;

while(eventType != XmlPullParser.END_DOCUMENT) {

String tagName = parser.getName(); // 获得当前节点的名称

switch (eventType) {

case XmlPullParser.START_TAG: // 当前等于开始节点

if("persons".equals(tagName)) { //

personList = new ArrayList();

} else if("person".equals(tagName)) { //

person = new Person();

id = parser.getAttributeValue(null, "id");

person.setId(Integer.valueOf(id));

} else if("name".equals(tagName)) { //

person.setName(parser.nextText());

} else if("age".equals(tagName)) { //

person.setAge(Integer.parseInt(parser.nextText()));

}

break;

case XmlPullParser.END_TAG: //

if("person".equals(tagName)) {

// 需要把上面设置好值的person对象添加到集合中

personList.add(person);

}

break;

default:

break;

}

eventType = parser.next(); // 获得下一个事件类型

}

return personList;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值