Android简易实战教程--第八话《短信备份~一》
各种手机助手里面都包含了短信备份这一项。短信的本分主要包含四项:内容body、事件date、方式type、号码address。
短信备份~一。使用一种很笨的方式来保存短信到xml文件中,而且保存在外部存储。后续会有:短信备份~二(xml序列化器);短信备份~三(内容提供者获取短信xml备份);短信备份~四(json方式备份数据库短信)。备份的方式越来越高效,比较不同存储方式。
很显然,初次介绍短信备份,以一种简单笨拙的方式,且不涉及内容提供者,虚拟10条短信。
短信的保存,要以对象的形式保存。因此创建一个javabean类:
- package com.itydl.createxml.domain;
- public class Message {
- private String body;
- private String date;
- private String address;
- private String type;
- public String getBody() {
- return body;
- }
- public void setBody(String body) {
- this.body = body;
- }
- public String getDate() {
- return date;
- }
- public void setDate(String date) {
- this.date = date;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- public String getType() {
- return type;
- }
- public void setType(String type) {
- this.type = type;
- }
- public Message(String body, String date, String address, String type) {
- super();
- this.body = body;
- this.date = date;
- this.address = address;
- this.type = type;
- }
- }
接着在mainactivity中代码:
- package com.itydl.createxml;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.util.ArrayList;
- import java.util.List;
- import com.itheima.createxml.domain.Message;
- import android.os.Bundle;
- import android.app.Activity;
- import android.view.Menu;
- import android.view.View;
- public class MainActivity extends Activity {
- List<Message> smsList;//存取一条短信得内容的对象
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- //虚拟10条短信
- smsList = new ArrayList<Message>();
- for(int i = 0; i < 10; i++){
- Message sms = new Message("小志好棒" + i, System.currentTimeMillis() + "", "138"+i+i, "1");
- smsList.add(sms);//并把短信存储到集合里面去。
- }
- }
- //点击按钮触发备份,一IO流方式存储
- public void click(View v){
- //在内存中把xml备份短信的格式拼接出来
- StringBuffer sb = new StringBuffer();
- sb.append("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>");
- sb.append("<messages>");
- for (Message sms : smsList) {
- sb.append("<sms>");
- sb.append("<body>");
- sb.append(sms.getBody());//如果发短信的人吃饱了没事干,在短信里加上了<body>,这样就会报错了。
- sb.append("</body>");
- sb.append("<date>");
- sb.append(sms.getDate());
- sb.append("</date>");
- sb.append("<type>");
- sb.append(sms.getType());
- sb.append("</type>");
- sb.append("<address>");
- sb.append(sms.getAddress());
- sb.append("</address>");
- sb.append("</sms>");
- }
- sb.append("</messages>");
- File file = new File("sdcard/sms.xml");//把短信这种性质的信息,保存在外部存储空间里
- try {
- FileOutputStream fos = new FileOutputStream(file);
- fos.write(sb.toString().getBytes());
- fos.close();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
因为涉及对sd卡的写操作,因此在清单文件中记得加入权限:
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
运行程序,点击短信备份按钮。在sd卡导出xml文件,用浏览器打开。即就是短信所有信息的备份。
但是,这种方式显得很笨拙,而且当用户短信信息里面有一个<body>标签的时候,上一次的<body>就没有尾节点与之匹配。就会报错,浏览器没法解析这个文件。这种方式也不会使用,知识提供一种思路。后续先介绍xml序列化器生成xml文件,就不会遇到这种问题
Android简易实战教程--第八话《短信备份~一》的更多相关文章
- Android简易实战教程--第十三话《短信备份和还原~三》
之前写过短信备份的小案例,哪里仅仅是虚拟了几条短信信息.本篇封装一个业务类,且直接通过内容提供者,访问本系统的短信信息,再提供对外接口.如果想要短信备份和短信还原,直接复制这段代码即可.对于您调用这个 ...
- Android简易实战教程--第四话《最简单的短信发送器》
首先配置一个布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln ...
- Android简易实战教程--第十七话《自定义彩色环形进度条》
转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/52203533 点击打开链接 在Android初级教程里面,介绍了shape用法 ...
- Android简易实战教程--第二十七话《自定义View入门案例之开关按钮详细分析》
转载此博客请注明出处点击打开链接 http://blog.csdn.net/qq_32059827/article/details/52444145 对于自定义view,可能是一个比较大的 ...
- Android简易实战教程--第二十三话《绚丽的菜单项》
转载本博客请注明出处:点击打开链接 http://blog.csdn.net/qq_32059827/article/details/52327456 今天这篇稍微增强点代码量,可能要多花上5分钟喽 ...
- Android简易实战教程--第二十话《通过广播接收者,对拨打电话外加ip号》
没睡着觉,起来更篇文章吧哈哈!首先祝贺李宗伟击败我丹,虽然我是支持我丹的,但是他也不容易哈哈,值得尊敬的人!切入正题:这一篇来介绍个自定义广播接收者. 通常我们在外拨电话的时候,一般为使用网络电话.如 ...
- Android简易实战教程--第十话《模仿腾讯手机助手小火箭发射详解》
之前对系统自带的土司的源码做了简要分析,见博客:点击打开链接 这一篇给一个小案例,自定义土司,模拟腾讯卫士的小火箭发射.如果想要迅速看懂代码,建议先去看一下上篇介绍点击打开链接 首先,定义一个服务,在 ...
- Android简易实战教程--第七话《在内存中存储用户名和密码》
首先是配置文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- Android简易实战教程--第六话《开发一键锁屏应用2·完成》
转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51885687点击打开链接 上一篇,初步开发了这个应用,功能都有了(见http:// ...
随机推荐
- 【PowerOJ1738】最小路径覆盖
Description 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V 中每个 顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖.P 中路径可以从V 的任何一个顶 ...
- Python3 运算符
装载自:https://www.cnblogs.com/cisum/p/8064222.html Python3 运算符 什么是运算符? 本章节主要说明Python的运算符.举个简单的例子 4 +5 ...
- (概念)多个CPU和多核CPU以及超线程(Hyper-Threading)
引言 在这篇文章中我会主要介绍CPU相关的一些重要概念和技术.如果你想更好地了解操作系统,那就从本文开始吧. 中央处理器(Central processing unit) 在我们了解其它概念之前,我们 ...
- java.lang.UnsatisfiedLinkError: D:\Tomcat\apache-tomcat-7.0.67\bin\tcnative-1.dll:
Can't load IA 32-bit .dll on a AMD 64-bit platform 错误原因 由错误提示可知,tcnative-1.dll是一个32位文件,但是运行在64位系统上 解 ...
- 解决$.ajax()在IE10以下失效的问题
一.问题重现 本地的脚本请求测试环境的接口 $.ajax({ url: ***, type: GET, data: data, success: function (data) { **** } }) ...
- hash数组快速查找一个字符串中出现最多的字符,并统计出现的次数
如何快速查找一个字符串中出现最多的字符,并统计出现的次数? 可以使用hash数组,也就是关联数组实现快速查找功能. function seek(str) { var hash = []; var ma ...
- 模仿天猫实战【SSM版】——项目起步
前言:现在自己的学习似乎遇到了瓶颈,感觉学习了 SSM 之后有一些迷茫,不知道接下来该往哪里去努力了,我觉得这是个很不好的状态,为了度过这段时期,我准备把天猫模仿下来(给自己找点事做)之后开始去巩固 ...
- git reset揭秘
一.命令 首先,让我们来解释几个定义. HEAD(头) 指向当前branch最顶端的一个commit,该分支上一次commit后的节点 Index(索引) The index, ...
- C++笔记004:C++类通俗点说
核心: C++的类就是对C语言的结构体进行了扩展,C++的结构体可以包含函数! ------------------------------------------------------ 我们学习C ...
- matlab sparse函数和full函数用法详解(转)
sparse函数 功能:Create sparse matrix-创建稀疏矩阵 用法1:S=sparse(X)--将矩阵X转化为稀疏矩阵的形式,即矩阵X中任何零元素去除,非零元素及其下标(索引)组成矩 ...