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. Java中的排序算法(2)

    Java中的排序算法(2) * 快速排序 * 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists). * 步骤为: * 1. 从数 ...

  2. DBLINK的session无法关闭,报异常!

    ------解决方法-------------------------------------------------------- --ALTER SESSION alter session clo ...

  3. Xcode运行的错误bug收集

    libopencore-amrnb.a(wrapper.o)' does not contain bitcode. You must rebuild it with bitcode enabled ( ...

  4. 《图解TCP/IP》

    MAC寻址:地址转发表:IP寻址:路由控制表. 网卡(网络接口卡),NIC. 循环复用DNS技术. 代理服务器是一种应用网关.防火墙. LLC是Logical Link Control的缩写,意为:逻 ...

  5. 完整学习git四git对象

    1查看git对象 git cat-file 实践 git head到底指向的是什么 ➜ gittest git:(master) find .git -name HEAD -o -name maste ...

  6. var_dump(is_writeable(ini_get("session.save_path")));

    var_dump(is_writeable(ini_get("session.save_path")));

  7. xtjh

    <div onkeydown="javascript:if(event.keyCode==13) search()"> <br > ISBN<span ...

  8. 杭电1020-Encoding

    Problem Description Given a string containing only 'A' - 'Z', we could encode it using the following ...

  9. Java8新特性之一、时间日期API

    package com.effective.common.base.date; import java.time.Instant; import java.time.LocalDate; import ...

  10. 修改tomcat的logo

    每页的<head> 里添加   <link rel="icon" href="favicon.gif" />   图片名称必须是favi ...