<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.generatexml.MainActivity" > <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="短信备份1"
android:id="@+id/btn1"
android:onClick="backupSms1" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="短信备份2"
android:id="@+id/btn2"
android:layout_below="@id/btn1"
android:onClick="backupSms2" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取xml数据"
android:id="@+id/btn3"
android:layout_below="@id/btn2"
android:onClick="getXml" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_get"
android:layout_below="@id/btn3"
android:onClick="getXml" />
/> </RelativeLayout>

 

package com.example.generatexml;

import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List; import org.xmlpull.v1.XmlSerializer; import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import android.util.Xml;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast; import com.example.generatexml.domain.SmsInfo; public class MainActivity extends ActionBarActivity { private List<SmsInfo> list; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); list = new ArrayList<SmsInfo>();
long phone = 1880075555;
for(int i=0;i<10;i++)
{
SmsInfo info = new SmsInfo(i, System.currentTimeMillis(),"<短信内容"+i,phone+i+"",i/2+1);
list.add(info);
}
} public void backupSms1(View v){ try {
File file = new File(Environment.getExternalStorageDirectory(),"backup1.xml");
FileOutputStream fos = new FileOutputStream(file); StringBuffer sb = new StringBuffer(); sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); sb.append("<smss>"); for(SmsInfo s :list)
{
sb.append("<sms>"); sb.append("<body>"+s.getBody()+"</body>");
sb.append("<type>"+s.getType()+"</type>");
sb.append("<addr>"+s.getAddr()+"</addr>");
sb.append("<date>"+s.getDate()+"</date>"); sb.append("</sms>"); } sb.append("</smss>"); fos.write(sb.toString().getBytes());
fos.close();
Toast.makeText(this, "保存成功", 0).show();
} catch (Exception e) { e.printStackTrace();
Toast.makeText(this, "保存失败", 0).show();
} } public void backupSms2(View v)
{ try {
XmlSerializer ser = Xml.newSerializer();
File file = new File(Environment.getExternalStorageDirectory(),"backup2.xml");
FileOutputStream os = new FileOutputStream(file);
ser.setOutput(os, "utf-8"); ser.startDocument("utf-8", true); ser.startTag(null, "smss"); for(SmsInfo s :list)
{
ser.startTag(null, "sms"); ser.attribute(null, "id", s.getId()+""); ser.startTag(null, "body");
ser.text(s.getBody());
ser.endTag(null, "body"); ser.startTag(null, "type");
ser.text(s.getType()+"");
ser.endTag(null, "type"); ser.startTag(null, "addr");
ser.text(s.getAddr());
ser.endTag(null, "addr"); ser.startTag(null, "date");
ser.text(s.getDate()+"");
ser.endTag(null, "date"); ser.endTag(null, "sms"); } ser.endTag(null, "smss"); ser.endDocument(); os.close(); Toast.makeText(this, "保存成功", 0).show(); } catch(Exception e) { e.printStackTrace();
Toast.makeText(this, "保存失败", 0).show();
}
} }
//解析xml文件
public void getXml(View v)
{
TextView tv = (TextView)this.findViewById(R.id.tv_get); try { InputStream is = MainActivity.this.getClassLoader().getResourceAsStream("backup2.xml");
List<SmsInfo> list = ParserXmlService.getSmsInfos(is); StringBuffer sb = new StringBuffer();
for(SmsInfo s:list)
{
sb.append(s.toString()); } tv.setText(sb.toString()); Toast.makeText(this, sb.toString(), 0).show(); } catch (Exception e) { e.printStackTrace();
Toast.makeText(this, "xml解析失败", 0).show();
} }

 

解析xml文件的service代码


package com.example.generatexml.service;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import org.xmlpull.v1.XmlPullParser; import android.util.Xml; import com.example.generatexml.domain.SmsInfo; public class ParserXmlService { public static List<SmsInfo> getSmsInfos(InputStream is) throws Exception
{ System.out.println("service");
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is, "utf-8");
List<SmsInfo> list = null;
SmsInfo sms = null; int type = parser.getEventType(); while(type!=XmlPullParser.END_DOCUMENT)
{ switch(type)
{
case XmlPullParser.START_TAG:
if("smss".equals(parser.getName()))
{
list = new ArrayList<SmsInfo>();
}
else if("sms".equals(parser.getName()))
{
sms = new SmsInfo();
String id = parser.getAttributeValue(0);
sms.setId(Integer.parseInt(id));
}else if("body".equals(parser.getName()))
{
String body = parser.nextText();
sms.setBody(body);
}else if("addr".equals(parser.getName()))
{
String addr = parser.nextText();
sms.setAddr(addr);
}
else if("date".equals(parser.getName()))
{
String date = parser.nextText();
sms.setDate(Long.parseLong(date));
}
else if("type".equals(parser.getName()))
{
String infoType = parser.nextText();
sms.setDate(Integer.parseInt(infoType));
} break;
case XmlPullParser.END_TAG:
if("sms".equals(parser.getName()))
{
list.add(sms);
sms = null;
}
break;
}
type = parser.next();
} return list; } }

 

android 生成、pull解析xml文件的更多相关文章

  1. [android] 采用pull解析xml文件

    /***********2016年5月6日 更新**********************/ 知乎:Android 中有哪几种解析 xml 的类,官方推荐哪种 ? 以及它们的原理和区别? 刘吉财: ...

  2. android——使用pull解析xml文件

    1.persons.xml 将persons.xml文件放到src目录下.其代码如下: <?xml version='1.0' encoding='UTF-8' standalone='yes' ...

  3. Android中pull解析XML文件的简单使用

    首先,android中解析XML文件有三种方式,dom,sax,pull 这里先讲pull,稍候会说SAX和DOM pull是一种事件驱动的xml解析方式,不需要解析整个文档,返回的值是数值型,是推荐 ...

  4. 使用XML序列化器生成XML文件和利用pull解析XML文件

    首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...

  5. Android -- 创建XML文件对象及其序列化, pull解析XML文件

    1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...

  6. 使用PULL解析XML文件

    转载博文1:http://blog.csdn.net/wangkuifeng0118/article/details/7313241 XmlPull和Sax类似,是基于流(stream)操作文件,然后 ...

  7. pull解析xml文件

    pull解析xml文件 先自己写一个xml文件,存一些天气信息 拿到xml文件 InputStream is = getClassLoader().getResourceAsStream(" ...

  8. dom4j生成和解析xml文件

    dom4j生成和解析xml文件 要生成和解析如下格式的xml文件: <?xml version="1.0" encoding="UTF-8"?> & ...

  9. Android SAX、DOM、Pull解析xml文件剖析与案例讲解

    XML介绍 XML(Extensible Markup Language) 即可扩展标记语言,与HTML一样,都是SGML(Standard Generalized Markup Language,标 ...

随机推荐

  1. selenium之使用unittest测试框架

    # 测试角色权限管理页面功能 from selenium import webdriver from login_page import LoginPage import random, time, ...

  2. USDT(omniCore)测试环境搭建

    一.测试环境搭建. 注:由于window版本的omni出现同步不了的问题,推荐使用linux系统进行usdt测试链的搭建. 1.下载omnicore: wget https://bintray.com ...

  3. mysql 性能指标

    qps 每秒处理的查询数tps 每秒处理的事务数IOPS 每秒磁盘进行的I/O操作次数 一.TPS:Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数. ...

  4. BZOJ4828 AHOI/HNOI2017大佬(动态规划+bfs)

    注意到怼大佬的操作至多只能进行两次.我们逐步简化问题. 首先令f[i][j]表示第i天结束后自信值为j时至多有多少天可以进行非防御操作(即恢复自信值之外的操作).这个dp非常显然.由于最终只需要保证存 ...

  5. 学习Spring Boot:(二十七)Spring Boot 2.0 中使用 Actuator

    前言 主要是完成微服务的监控,完成监控治理.可以查看微服务间的数据处理和调用,当它们之间出现了异常,就可以快速定位到出现问题的地方. springboot - version: 2.0 正文 依赖 m ...

  6. 洛谷 P2491消防 解题报告

    P2491 消防 题目描述 某个国家有n个城市,这n个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为zi(zi<=1000). 这个国家的人对火焰有超越宇宙的热情,所以这个 ...

  7. Spark 集成开发

    WordCount.py # coding:utf-8 from pyspark import SparkContext from pyspark import SparkConf def SetLo ...

  8. JAVA8给我带了什么——lambda表达

    这此年来我一直从事.NET的开发.对于JAVA我内心深处还是很向往的.当然这并不是说我不喜欢.NET.只是觉得JAVA也许才是笔者最后的归处.MK公司是以.NET起家的.而笔者也因为兄弟的原因转行.N ...

  9. JAVA类中获取项目路径

    在java web项目中获取项目的src/main/resource下的文件路径 当前类名.class.getClassLoader().getResource("/").getP ...

  10. 【洛谷P3224】永无乡 并查集+Splay启发式合并

    题目大意:给定 N 个点的图,点有点权,初始有一些无向边,现在有 Q 个询问,每个询问支持动态增加一条无向边连接两个不连通的点和查询第 X 个点所在的联通块中权值第 K 大的是哪个点. 题解:学会了平 ...