Android中序列化对象到XMl 和 XML反序列化为对象
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反序列化为对象的更多相关文章
- Java序列化对象为字符串并将字符串反序列化为对象
对象的序列化与反序列化其实就是将对象的状态保存下来,一般是保存到文件中,但是其实更常用的是将对象序列化为字符串保存到数据库中,然后在需要读取对象的情况下将字符串反序列化为对象. 可以序列化的类必须 ...
- spring mvc接收ajax提交的JSON数据,并反序列化为对象
需求:spring mvc接收ajax提交的JSON数据,并反序列化为对象,代码如下: 前台JS代码: //属性要与带转化的对象属性对应 var param={name:'语文',price:16}; ...
- JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象
JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ...
- JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象 。
JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ...
- 序列化工具类({对实体Bean进行序列化操作.},{将字节数组反序列化为实体Bean.})
package com.dsj.gdbd.utils.serialize; import java.io.ByteArrayInputStream; import java.io.ByteArrayO ...
- C#和java和android中的NetWorkAdapter,httpRequest,WebView,json,xml
原文地址:http://blog.csdn.net/intbird C#NetWorkAdapter 20121011.======================================== ...
- android中使用哪种方式解析XML比較好
SAX是一个用于处理XML事件驱动的"推"模型. 长处是一种解析速度快而且占用内存少的xml解析器,它须要哪些数据再载入和解析哪些内容. 缺点是它不会记录标签的关系.而要让你的应用 ...
- Android中的测试类配置AndroidManifest.xml
测试类至于要把一个类继承ActivityTestCase即可至于方法,根据需要自己建立方法:之后必须配置AnroidMainfest.xml文件 配置AndroidManifest.xml文件 1) ...
- 序列化之对象,字符串,byte数组,XML之间的转换(一)
工作一年多了,越来越感到自己不能这样一直下去,在最好的青春里面却已经死了.被时间消磨了意志,被工作杀死了精神.我想,我只要活着,我就要去不断的要求自己,不断的去追求更高的山峰. 放眼四周,有趣的灵魂越 ...
随机推荐
- Ubuntu 下配置ftp服务端
安装sudo apt-get install pure-ftpdsudo netstat –ano | grep “21”查看21端口是否已开启.完成安装后,就可以用Ubuntu系统的用户名和密码登陆 ...
- oracle 数据泵 每天自动备份
@echo off echo 删除10天前的备分文件和日志 forfiles /p "e:\app\back" /m *.dmp /d -5 /c "cmd /c del ...
- 5.1JavaScript精华
9.使用Promises Promises,是Javascript表现item的一种方式.它执行异步工作,在未来的某个时间点完成.遇到最多的promises,是使用Ajax请求.浏览器在后台发起HTT ...
- 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.5.Accordion控件
accordion是另一个UI控件,能允许你将一组content加入相互分隔的.能够被浏览者的交互打开或关闭的panels中.因此,它大多数的content在初始化的时候是隐藏的,很像tabs控件.每 ...
- RabbitMQ 基本概念介绍-----转载
1. 介绍 RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现.用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面都非 ...
- Integer Inquiry -TJU1112
作为最简单的高精度加法,要注意的是如下几点, 第一,因为是数位达到上百位的大数,所以只能用字符串数组来存贮. 第二,为了方便之后的相加操作,应该把字符串数组逆序转化为一个整型数组. 第三,在控制进位的 ...
- HDU 3746:Cyclic Nacklace
Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- asp.net 页面跳转传值的几种方式
参考地址: http://blog.csdn.net/zzzzzzzert/article/details/8486143 protected void Button1_Click(object se ...
- 批发网加盟页面轮播Jquery jcarousellite插件效果
Jquery jcarousellite 插件的好处 其中: 参数说明: btnPrev string 上一个按钮的class名, 比如 btnPrev: ".prev" ...
- 在C++工程中设置全局函数
在头文件中对该函数进行全局函数的声明: extern void Test(); 在cpp文件中进行函数的定义: void Test() { MessageBox(NULL,L"调用了C++的 ...