目录

  • 1 第一周 android简介
    • 1.1 第一课 Android基础入门1
    • 1.2 第二课 Android基础入门2
    • 1.3 第三课 Android UI开发介绍
  • 2 第二周 android布局
    • 2.1 第一课 Android 布局文件介绍1
    • 2.2 第二课 Android 布局文件介绍2
    • 2.3 第三课 Android 布局文件介绍3
  • 3 第三周 Android UI组件开发
    • 3.1 第一课 Button和ImageButton
    • 3.2 第二课 TextView和EditText
    • 3.3 第三课 RadioButton和CheckBox
  • 4 第四周 Android UI组件开发
    • 4.1 第一课 Spinner和ListView
    • 4.2 第二课 应用案例-手机信息页面
    • 4.3 第三课 Android生命周期
  • 5 第五周 Android组件通信
    • 5.1 第一课 Intent的介绍
    • 5.2 第二课 Intent实现各种系统功能
    • 5.3 第三课 应用案例-手机注册页面
  • 6 第六周 数据存储
    • 6.1 第一课 应用案例-新建联系人
    • 6.2 第二课 数据存储-简单文件存储
    • 6.3 第三课 SharedPreferences存储
  • 7 第七周 数据存储
    • 7.1 第一课 xml文件存储
    • 7.2 第二课 应用案例-植物百科
    • 7.3 第三课  ListView 组件高级使用
  • 8 第八周 SQLite数据库
    • 8.1 第一课 应用案例-应用列表
    • 8.2 第二课 使用SQLite数据库存储(创建数据库和表)
    • 8.3 第三课 使用SQLite数据库存储(对表数据操作)
  • 9 第九周 项目实战-商品购物车处理
    • 9.1 第一课 使用SQLite数据库存储(对表数据查询)
    • 9.2 第二课 商品购物车处理(布局)
    • 9.3 第三课 商品购物车处理(数据处理)
  • 10 第十周 内容提供者及广播
    • 10.1 第一课 内容提供者的使用
    • 10.2 第二课 广播概念以及如何使用
    • 10.3 第三课 自定义广播
  • 11 第十一周 广播和服务
    • 11.1 第一课 应用案例-电池电量
    • 11.2 第二课 应用案例-通话记录
    • 11.3 第三课 服务简介
  • 12 第十二周 服务应用
    • 12.1 第一课 应用案例—音乐播放器
    • 12.2 第二课 应用案例—地震监测
    • 12.3 第三课 获得手机SIM卡信息
  • 13 第十三周 网络编程
    • 13.1 第一课 网络编程入门
    • 13.2 第二课 使用HttpClient访问网络
    • 13.3 第三课 webview组件
  • 14 第十四周 网络编程应用案例
    • 14.1 第一课 消息机制简介
    • 14.2 第二课 应用案例-应用升级
    • 14.3 第三课 应用案例-应用升级
第一课 xml文件存储

一、XML序列化和解析

序列化是将对象状态转换为可保持或传输的过程。在序列化对象时,需要使用XmlSerialize序列化器,它可以将IO流中传输的对象变得像基本类型数据一样,实现数据传递的功能。

序列化后的对象以XML形式保存,因此,先来看一下person.xml文件。



XML序列化的示例代码如下:

XmlSerializer serializer = Xml.newSerializer();    

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

serializer.startDocument("utf-8",ture);                 

serializer.startTag(null,"persons");                

serializer.text("张三");                                        

serizlizer.endTag(null,"persons");                       

serializer.endDocument();  


XML解析



课堂案例:天气预报


xml文件:

<infos>

<city id="1">

<temp>20℃/30℃</temp>

<weather>晴天多云</weather>

<name>上海</name>

<pm>80</pm>

<wind>1级</wind>

</city>

<city id="2">

<temp>26℃/32℃</temp>

<weather>晴天</weather>

<name>北京</name>

<pm>98</pm>

<wind>3级</wind>

</city>

<city id="3">

<temp>15℃/24℃</temp>

<weather>多云</weather>

<name>哈尔滨</name>

<pm>30</pm>

<wind>5级</wind>

</city>

</infos>


java文件:

public class WeatherService {

//返回天气信息的集合

public static List<WeatherInfo> getWeatherInfos(InputStream is) 

throws Exception {

//得到pull解析器

XmlPullParser parser = Xml.newPullParser();

// 初始化解析器,第一个参数代表包含xml的数据

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

List<WeatherInfo> weatherInfos = null;

WeatherInfo weatherInfo = null;

//得到当前事件的类型

int type = parser.getEventType();

// END_DOCUMENT文档结束标签 

while (type != XmlPullParser.END_DOCUMENT) {

switch (type) {

//一个节点的开始标签

case XmlPullParser.START_TAG:

//解析到全局开始的标签 infos 根节点

if("infos".equals(parser.getName())){

weatherInfos = new ArrayList<WeatherInfo>();

}else if("city".equals(parser.getName())){

weatherInfo = new WeatherInfo();

String idStr = parser.getAttributeValue(0);

weatherInfo.setId(Integer.parseInt(idStr));

}else if("temp".equals(parser.getName())){

    //parset.nextText()得到该tag节点中的内容

String temp = parser.nextText();

weatherInfo.setTemp(temp);

}else if("weather".equals(parser.getName())){

String weather = parser.nextText();

weatherInfo.setWeather(weather);

}else if("name".equals(parser.getName())){

String name = parser.nextText();

weatherInfo.setName(name);

}else if("pm".equals(parser.getName())){

String pm = parser.nextText();

weatherInfo.setPm(pm);

}else if("wind".equals(parser.getName())){

String wind = parser.nextText();

weatherInfo.setWind(wind);

}

break;


//一个节点结束的标签

case XmlPullParser.END_TAG:

//一个城市的信息处理完毕,city的结束标签

if("city".equals(parser.getName())){

//一个城市的信息 已经处理完毕了.

weatherInfos.add(weatherInfo);

weatherInfo = null;

}

break;

}

//只要不解析到文档末尾,就解析下一个条目。得到下一个节点的事件类型

//注意,这个一定不能忘,否则会成为死循环

type = parser.next();

}

return weatherInfos;

}

}