Android简易实战教程--第九话《短信备份~二》

这一篇,承接地八话。使用高效的方式备份短信——xml序列化器。

存储短信,要以对象的方式存储。首先创建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中的diamante如下:

package com.itydl.xmlserializer;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlSerializer;

import com.itheima.createxml.domain.Message;

import android.os.Bundle;
import android.app.Activity;
import android.util.Xml;
import android.view.Menu;
import android.view.View;
//为了更好地保存不同,且负责的数据,使用xml序列器
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);
		}
	}

	public void click(View v){
		//使用xml序列化器生成xml文件。序列化器会把乱七八糟的东西(短信里有标签属性)过滤掉
		//1.拿到序列化器对象
		XmlSerializer xs = Xml.newSerializer();
		//2.初始化.因为涉及到xml文件,因此初始化也包含文件名和路径
		File file = new File("sdcard/sms2.xml");
		try {
			FileOutputStream fos = new FileOutputStream(file);
			//enconding:指定用什么编码生成xml文件
			xs.setOutput(fos, "utf-8");//setOutput(OutputStream os, String encoding) ,编码方式默认u8
			
			//3.开始生成xml文件
			//enconding:指定头结点中的enconding属性的值
			xs.startDocument("utf-8", true);//生成头结点(最高一行),startDocument(String encoding, Boolean standalone) 
			
			xs.startTag(null, "message");//生成一个根节点,开始标签节点
			
			for (Message sms : smsList) {
				xs.startTag(null, "sms");
				
				xs.startTag(null, "body");//start和end一对一对的写。还有四个子节点
				xs.text(sms.getBody() + "<body>");//这样不会报错。而是把<body>当做了内容了
				xs.endTag(null, "body");
				
				xs.startTag(null, "date");
				xs.text(sms.getDate());
				xs.endTag(null, "date");
				
				xs.startTag(null, "type");
				xs.text(sms.getType());
				xs.endTag(null, "type");
				
				xs.startTag(null, "address");
				xs.text(sms.getAddress());
				xs.endTag(null, "address");
				
				xs.endTag(null, "sms");
			}
			
			xs.endTag(null, "message");
			
			//告诉序列化器,文件生成完毕
			xs.endDocument();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}

}

最后也要记得加入权限:

  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

可见这种方式解决了前面遇到的问题,而且高效了很多。

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

android独特的天气预报 - 2016-07-24 14:07:50

android独特的天气预报 package com.dchan.myweather;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import java.security.PublicKey;import java.util.ArrayList;import java.util.Calendar;import java.util.Collection;import java.util.HashMap;impo

cocoapods的安装和使用 总结 - 2016-07-24 14:07:48

一、CocoaPods 是什么? CocoaPods 是开发 OS X 和 iOS 应用程序的一个第三方库的依赖管理工具。利用CocoaPods,可以定义自己的依赖关系 (称作 pods),并且随着时间的变化,以及在整个开发环境中对第三方库的版本管理非常方便。 CocoaPods 背后的理念主要体现在两个方面。首先,在工程中引入第三方代码会涉及到许多内容。针对 Objective-C 初级开发者来说,工程文件的配置会让人很沮丧。在配置buildphases和linker flags过程中,会引起许多人为因
最近有一段时间没写博客了,一方面是工作比较忙,一方面也着实本人水平有限,没有太多能与大家分享的东西,也就是在最近公司要做一个抢红包的功能,老板发话了咋们就开干呗,本人就开始在网上收集资料,经过整理和实践,总算完美实现了功能,这里拿出本人一点微薄的成就与大家分享。 首先界面是这样的 开启自动抢红包只需点击相应的选项即可,下面我们进入正题,实现自动抢红包的原理,其实是借助android下的一个辅助服务AccessibilityService,这个服务是google公司为许多Android使用者因为各种情况导致
在实现该控件之前,先说一下该控件的难度, 一、   每个item中如果有RadioButton之类,可以focus焦点的,点击效果可能会失效   二、无限的滚动   下面是效果图: 实现上图的效果,一共自定义了两个 控件,viewpager+底部导航图标 下面我先来讲解一下,viewpager的实现: 1.初始化 pre name="code" class="java"/** 点击按下的坐标 **/PointF downP = new PointF();/** 当前按下的坐标 **/PointF curP

Android-下拉刷新库 - 2016-07-24 14:07:44

前言 入职接近半个多月,有几天空闲,所以想着能不能自己实现一个库来练练手,因为之前一直想要实现下拉刷新的功能,因此就有了这样一个自制的下拉刷新库——RefreshWidgetLib. 关于下拉刷新 下拉刷新,作为一个几乎每个应用都会出现的一种控件,不言而喻,它对于提高用户体验有着很重要的作用,而且也已经成为了人们习惯的一种操作。说起下拉刷新这种设计,最早的引入者是在2008年上线的Tweetie,Tweetie引入了如今随处可见的“下拉刷新”设计,不仅有多达数百款App Store应用使用这种设计,就连苹

从AIDL看Android跨进程通信 - 2016-07-24 14:07:38

AIDL是Android实现IPC的一种重要的方式,理解它的原理对理解Android进程间通信有很大的帮助。AIDL的定义,已经有很多介绍的文章了,这里就不做详解了。我们直接从实例入手来分析AIDL实现原理。 AIDL的使用 首先需要定义AIDL接口IMyService.aidl: // IMyService.aidl package com.chuck.aidldemo; // Declare any non-default types here with import statements inter
OC与Swift两种实现方式基本上区别不大,主要是在一些对象或方法的调用方式不同 OC代码样式: self.view.backgroundColor = [UIColor blackColor];          //加载颗粒状的火花图片     CAEmitterLayer *emitterLa = [CAEmitterLayer layer];     emitterLa.emitterPosition = CGPointMake(self.view.bounds.size.width/2, sel
前言 相信很多朋友在开发中都会遇到图片上传的情况,尤其是多图上传,最 经典的莫过于微信的图片选择了。所有很多情况下会使用到多图选择。 所以就有了这篇文章,今天抽点时间写了个控件。 支持自定义选择图片的样式 支持设置图片选择数量 支持图片预览,删除 支持图片拍照 先来看看效果 实现分析 假如不定义控件,我们要实现这样一个功能,无非是写个GridView在item点击的时候去显示图片进行选择,在返回界面的时候进行GridView的数据刷新。我们把这些逻辑写在我们自定义的GridView中,就成了一个新的控件。
在360对DroidPlugin的特点介绍中有云: 插件的四大组件完全不需要在Host程序中注册,支持Service、Activity、BroadcastReceiver、ContentProvider四大组件。 实现了进程管理,插件的空进程会被及时回收,占用内存低。 之所以支持Service,Activity,ContentProvider三大组件,是因为DroidPlugin在AndroidManifest文件中预先注册了8个运行插件的进程,每个进程预注册Service一个, ContentProvi
本篇介绍ListView控件,这是Android中比较重要也比较复杂的控件,这里只谈到使用ViewHolder机制优化即可。 一、ListView简介 ListView是Android系统中显示列表的控件,每个ListView都可以包含很多个列表项。 二、ListView的使用 概念不多说,直接来介绍使用方法。 ListView中比较复杂的是数据适配器,其作用是把复杂的数据(数组、链表、数据库、集合等)填充在指定视图界面,是连接数据源和视图界面的桥梁。常见的Android原生的适配器有ArrayAdapt