package com.example.xstreamdemo;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import android.app.Activity;import android.os.Bundle;import com.example.xstreamdemo.commonutil.GetContextUtil;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;public class MainActivity extends Activity { /* * Xstream是一种OXMaping技术,是用来处理xml文件序列化的框架,在将JavaBean序列化或将XML文件反序列化的时候 * 不需要其他辅助类和映射文件,使得XML序列化不在繁琐。Xstream也可以将JavaBean序列化成Json或反序列化。 */ /* * 问题描述 * 1、XStream官网下载最新xstream-1.4.9.jar拷贝到lib目录下刷新工程出现如下错误 * 出现Conversion to Dalvik format failed with error 1 * 解决方法 改变导包方式Build path configure Build Path…… Libraries Add Exteral JARS……错误消失 * Run as报错java.lang.NoClassDefFoundError:com.throught.xstream.XStream * 解决方法将低版本的xstream-1.4.2.jar复制到lib目录下刷新Run as成功(尝试以Build path……方式导入1.4.2依然报NoClass……) * 2、xml反序列化时出现Cannot construct com.example.xstreamdemo.person as it does not have a no-args * constructor 解决方法在Person类中加入无参构造器 */ PRivate XStream xStream; private ObjectOutputStream out; private ObjectInputStream in; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); GetContextUtil.setContext(this); setContentView(R.layout.activity_main); Person person=new Person("张三",23); // 导入xstream包 objectXML序列化 xStream=new XStream(); /* * xStream.aliaspackage()包重命名 * .alias()类重名 * .aliasField()字段重命名 */ xStream.aliasField("姓名", Person.class,"name"); String object2xml=xStream.toXML(person); System.out.println(object2xml); //objectXML反序列化 person=(Person)xStream.fromXML(object2xml); System.out.println(person); try { objectSerialize(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } /* * 导入jettison-1.0.1.jar包Run as出现错误java.lang.verifyerror……没有解决 * xStream=new XStream(new JettisonMappedXmlDriver()); * xStream.setMode(XStream.NO_REFERENCES); */ xStream=new XStream(new JsonHierarchicalStreamDriver()); String object2json=xStream.toXML(new Person("王五",23)); System.out.println(object2json); /* * 使用jsonhierarchicalstreamdriver驱动无法json2object * person=(Person)xStream.fromXML(object2json); * logger.info(person); */ } // 直接在方法上抛出异常可减少使用try……cache语句 private void objectSerialize() throws Exception{ /* * 对象序列化就是把对象变为二进制的数据流,通过对象序列化可以很方便的进行对象的传输和存储,对象序列化只需对象所在类 * 实现java.io.Serializable接口,通过objectoutputstream实现对象序列化输出,objectinputstream对象 * 反序列化输入 * * XStream对象输入输出不需要实现接口,同样通过对象输入输出流进行输入输出 */ //文件不存在则会自动创建 File file=new File(GetContextUtil.getContext().getFilesDir()+File.separator+"XStream.txt"); out=xStream.createObjectOutputStream(new FileOutputStream(file)); out.writeObject(new Person("李四",23)); //若不关闭输出流内容没有写入 out.close(); if(file.exists()&&file.length()!=0){ in=xStream.createObjectInputStream(new FileInputStream(file)); System.out.println(((Person)in.readObject())); in.close(); } }}源码下载地址:http://download.csdn.net/detail/grow_up_footstep/9762393
新闻热点
疑难解答