package com.example.xmloperation;

import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer; import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.util.Xml;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast; import com.example.bean.SmsInfo; public class MainActivity extends ActionBarActivity { private TextView content; private List<SmsInfo> smsInfos = new ArrayList<SmsInfo>(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); content = (TextView)findViewById(R.id.tv); //将对象进行序列话
//1: 我们可以采用模拟的方法, 利用StringBuilder进行拼装XMl文件, 不过该方法不够灵活, 处理起来比较麻烦,但是工具底层的实现基本也是实现的。
} //2: 利用Android提供的Xml.Serializer 来进行序列化对象文XML
@SuppressLint("ShowToast")
public void serializer2XML(View view) {
//初始化短信
init(); Log.i("MainActivity", " 开始序列化");
XmlSerializer serializer = Xml.newSerializer();
File file = new File(Environment.getExternalStorageDirectory(), "smsinfo.xml");
FileOutputStream os;
try {
os = new FileOutputStream(file);
serializer.setOutput(os, "utf-8"); serializer.startDocument("utf-8", true);
serializer.startTag(null, "smss");
for (SmsInfo info : smsInfos) {
serializer.startTag(null, "sms");
serializer.attribute(null, "id", info.getId()+""); serializer.startTag(null, "body");
serializer.text(info.getBody());
serializer.endTag(null, "body"); serializer.startTag(null, "type");
serializer.text(info.getType()+"");
serializer.endTag(null, "type"); serializer.startTag(null, "date");
serializer.text(info.getDate()+"");
serializer.endTag(null, "date"); serializer.startTag(null, "address");
serializer.text(info.getAddress());
serializer.endTag(null, "address"); serializer.endTag(null, "sms");
}
serializer.endTag(null, "smss");
serializer.endDocument(); os.close(); Toast.makeText(this, "序列化成功", ).show(); } catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "序列化失败", ).show();
}
} //利用Pull解析XMl
public void deserialize(View view) { Log.i("MainActivity", " 开始反序列化"); XmlPullParser parser = Xml.newPullParser();
List<SmsInfo> mInfos = null;
SmsInfo info = null; try {
parser.setInput(MainActivity.class.getClassLoader().getResourceAsStream("smsinfo.xml"), "utf-8"); int type = parser.getEventType(); while (type != XmlPullParser.END_DOCUMENT) {
System.out.println("type = " + type);
switch (type) {
case XmlPullParser.START_TAG:
if ("smss".equals(parser.getName())) {
mInfos = new ArrayList<SmsInfo>();
} else if ("sms".equals(parser.getName())) {
info = new SmsInfo();
info.setId(Integer.parseInt(parser.getAttributeValue()));
} else if ("body".equals(parser.getName())) {
info.setBody(parser.nextText());
} else if ("type".equals(parser.getName())) {
String temp = parser.nextText();
//System.out.println("temp = " + temp);
info.setType(Integer.parseInt(temp));
} else if ("date".equals(parser.getName())){
info.setDate(Long.parseLong(parser.nextText()));
} else if ("address".equals(parser.getName())) {
info.setAddress(parser.nextText());
}
break;
case XmlPullParser.END_TAG:
if ("sms".equals(parser.getName())) {
mInfos.add(info);
info = null;
}
break;
}
type = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "反序列化失败", ).show(); ;
} StringBuilder sb = new StringBuilder();
System.out.println(mInfos.size());
for (SmsInfo info1 : mInfos) {
//System.out.println("info = " + info.getAddress());
sb.append(info1.toString() + "\n");
}
content.setText(sb.toString()); } private void init() {
Random random = new Random();
long address = 18766960000l;
for (int i = ; i < ; ++i) {
System.out.println("i = " + i);
SmsInfo smsInfo = new SmsInfo(System.currentTimeMillis(), random.nextInt() + , "短信内容" + i, ""+address + i, i);
smsInfos.add(smsInfo);
}
}
}

中间遇的坑爹的是在反序列化的时候你的xml中间每个元素之间不要出现空格,空文本, 否则指针指向的下一个就是空文本了, 解析会出现错误。

Android中序列化对象到XMl 和 XML反序列化为对象的更多相关文章

  1. Java序列化对象为字符串并将字符串反序列化为对象

    对象的序列化与反序列化其实就是将对象的状态保存下来,一般是保存到文件中,但是其实更常用的是将对象序列化为字符串保存到数据库中,然后在需要读取对象的情况下将字符串反序列化为对象.   可以序列化的类必须 ...

  2. spring mvc接收ajax提交的JSON数据,并反序列化为对象

    需求:spring mvc接收ajax提交的JSON数据,并反序列化为对象,代码如下: 前台JS代码: //属性要与带转化的对象属性对应 var param={name:'语文',price:16}; ...

  3. JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象

    JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ...

  4. JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象 。

    JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ...

  5. 序列化工具类({对实体Bean进行序列化操作.},{将字节数组反序列化为实体Bean.})

    package com.dsj.gdbd.utils.serialize; import java.io.ByteArrayInputStream; import java.io.ByteArrayO ...

  6. C#和java和android中的NetWorkAdapter,httpRequest,WebView,json,xml

    原文地址:http://blog.csdn.net/intbird C#NetWorkAdapter 20121011.======================================== ...

  7. android中使用哪种方式解析XML比較好

    SAX是一个用于处理XML事件驱动的"推"模型. 长处是一种解析速度快而且占用内存少的xml解析器,它须要哪些数据再载入和解析哪些内容. 缺点是它不会记录标签的关系.而要让你的应用 ...

  8. Android中的测试类配置AndroidManifest.xml

    测试类至于要把一个类继承ActivityTestCase即可至于方法,根据需要自己建立方法:之后必须配置AnroidMainfest.xml文件 配置AndroidManifest.xml文件 1) ...

  9. 序列化之对象,字符串,byte数组,XML之间的转换(一)

    工作一年多了,越来越感到自己不能这样一直下去,在最好的青春里面却已经死了.被时间消磨了意志,被工作杀死了精神.我想,我只要活着,我就要去不断的要求自己,不断的去追求更高的山峰. 放眼四周,有趣的灵魂越 ...

随机推荐

  1. 4.1HTML和Bootstrap css精华

    1.HTML 2.理解Bootstrap HTML元素告诉浏览器,他要表现的是什么类型的内容,当他们不提供任何关于如何显示内容的信息.如何显示内容的信息,由CSS提供. 本书仅包含足够的信息,让你查看 ...

  2. ios tabbar 文字位置

    [nav.tabBarItem setTitlePositionAdjustment)];

  3. HDU 3887:Counting Offspring(DFS序+树状数组)

    http://acm.hdu.edu.cn/showproblem.php?pid=3887 题意:给出一个有根树,问对于每一个节点它的子树中有多少个节点的值是小于它的. 思路:这题和那道苹果树是一样 ...

  4. Asp.net Vnext Filters

    ASP.NET MVC 提供Filters(筛选器)之前或之后调用操作方法执行筛选逻辑,和AOP面向切面编程一样. 本文已经同步到<Asp.net Vnext 系列教程 >中] 本章主要介 ...

  5. WebDriver使用指南(完整篇)

    第1章        入门 1.1   下载selenium2.0的lib包 http://code.google.com/p/selenium/downloads/list 官方UserGuide: ...

  6. Reflector8.5 .net反编译工具 破解教程

    一.断网 二.打开软件.打开注册机 三. 四. 五. 六. 七. 八.

  7. 【20160924】GOCVHelper MFC增强算法(2)

    //创建或续写目录下的csv文件,填写“文件位置-分类”对     int writeCsv(const string& filename,const Vector<pair<st ...

  8. 【计算机网络】当输入URL后发生了什么

    我们使用一个非常简单的模型,并假设它是最简单的HTTP请求,不使用代理并且使用的是IPv4 1. 浏览器首先判断使用的是什么协议(ftp/http),然后对URL进行安全检查.最后浏览器查看缓存,如果 ...

  9. lua中for循环

    , do ') end 显示的结果是 xbwang@xbwang-desktop:~/Desktop$ th for.lua 其他语言只会输出一个2,lua的这个for循环输出了两个2 Lua 编程语 ...

  10. fullPage.js

    https://github.com/alvarotrigo/fullPage.js  下载地址 demo:http://pan.baidu.com/s/1o8QWCmm 演示:http://full ...