Android中序列化对象到XMl 和 XML反序列化为对象
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Android中序列化对象到XMl 和 XML反序列化为对象,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4265字,纯文字阅读大概需要7分钟。
内容图文
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 protectedvoid 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") publicvoid 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, "序列化成功", 0).show(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "序列化失败", 0).show(); } } //利用Pull解析XMlpublicvoid 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>(); } elseif ("sms".equals(parser.getName())) { info = new SmsInfo(); info.setId(Integer.parseInt(parser.getAttributeValue(0))); } elseif ("body".equals(parser.getName())) { info.setBody(parser.nextText()); } elseif ("type".equals(parser.getName())) { String temp = parser.nextText(); //System.out.println("temp = " + temp); info.setType(Integer.parseInt(temp)); } elseif ("date".equals(parser.getName())){ info.setDate(Long.parseLong(parser.nextText())); } elseif ("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, "反序列化失败", 0).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()); } privatevoid init() { Random random = new Random(); long address = 18766960000l; for (int i = 0; i < 10; ++i) { System.out.println("i = " + i); SmsInfo smsInfo = new SmsInfo(System.currentTimeMillis(), random.nextInt(2) + 1, "短信内容" + i, ""+address + i, i); smsInfos.add(smsInfo); } } }
中间遇的坑爹的是在反序列化的时候你的xml中间每个元素之间不要出现空格,空文本, 否则指针指向的下一个就是空文本了, 解析会出现错误。
原文:http://www.cnblogs.com/E-star/p/3857377.html
内容总结
以上是互联网集市为您收集整理的Android中序列化对象到XMl 和 XML反序列化为对象全部内容,希望文章能够帮你解决Android中序列化对象到XMl 和 XML反序列化为对象所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。