对于App开发者,抽象来说,其实就是将数据以各种各样的方式展示在用户面前以及采集用户的数据。采集用户的数据包括用户的输入、触摸、传感器等,展示的数据通过网络来源于各业务系统,以及用户的

输入数据。在这个过程中,数据存储显得由为重要。这也是我做为开端讲解的目的。良好的运用数据存储,不仅的能有效减少访问服务器的次数、用户的流量,还能加快App的响应速度,甚至简化应用的业务逻辑。数据

存储这一块将介绍常用的2种数据缓存方式,Android SharedPreferences文件数据存储作为一章,sqlite 作为一章。另外我这一系列的介绍都不会有介绍基础的api,适合有一定基础的童鞋。

  简单粗暴,开始SharedPreferences。SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置。是以xml方式来保存,整体效率来看不是特别的高,对于常规的轻量级而言比SQLite

要好不少,xml处理时Dalvik会通过自带底层的本地XML Parser解析。下面直接上代码。

 /**
* SharedPreferences 数据存储工具类
*
*
*/
public class SPUtil {
private static String PreferenceName = "Constant"; /**
* 储存复杂的数据对象字段
*
* @param key
* @param t
* @return
*/
public static <T> boolean saveObjectToShare(String key, T t) {
return saveObjectToShare(AppContext.getApplication(), PreferenceName,
key, t);
} /**
* 储存复杂的数据字段对象
*
* @param context
* @param key
* @param t
* @return
*/
public static <T> boolean saveObjectToShare(Context context, String key, T t) {
return saveObjectToShare(context, PreferenceName, key, t);
} /**
*
* @param context
* @param name
* @param key
* @param t
* @return
*/ public static <T> boolean saveObjectToShare(Context context, String name,
String key, T t) {
try {
SharedPreferences sp = context.getSharedPreferences(name,
Context.MODE_PRIVATE);
// 存储
Editor editor = sp.edit();
if (t == null) {
editor.putString(key, "");
editor.commit();
return true;
}
ByteArrayOutputStream toByte = new ByteArrayOutputStream();
ObjectOutputStream oos; oos = new ObjectOutputStream(toByte);
oos.writeObject(t);
// 对byte[]进行Base64编码
String payCityMapBase64 = new String(Base64.encode(
toByte.toByteArray(), Base64.DEFAULT)); editor.putString(key, payCityMapBase64);
editor.commit();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
} /**
* 得到复杂的数据对象
*
* @param key
* @return
*/
public static <T> T getObjectFromShare(String key) {
return getObjectFromShare(AppContext.getApplication(), PreferenceName,
key);
} /**
* 得到复杂的数据对象
*
* @param context
* @param key
* @return
*/
public static <T> T getObjectFromShare(Context context, String key) {
return getObjectFromShare(context, PreferenceName, key);
} /**
* 得到复杂的数据对象
*
* @param key
* @param object
*/
@SuppressWarnings("unchecked")
public static <T> T getObjectFromShare(Context context, String name,
String key) {
try {
SharedPreferences sp = context.getSharedPreferences(name,
Context.MODE_PRIVATE);
String payCityMapBase64 = sp.getString(key, "");
if (payCityMapBase64.length() == 0) {
return null;
}
byte[] base64Bytes = Base64
.decode(payCityMapBase64, Base64.DEFAULT);
ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
return (T) ois.readObject();
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 返回String类型数据,默认是“”;
*
* @param key
* @return
*/
public static String getString(String key) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
return sp.getString(key, "");
} /**
* 存储boolean数据类型
*
* @param key
* @param value
*/
public static void saveboolean(String key, boolean value) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
Editor editor = sp.edit();
editor.putBoolean(key, value);
editor.commit();
} /**
* 返回boolean类型数据,默认是true;
*
* @param key
* @return
*/
public static boolean getBoolean(String key) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
return sp.getBoolean(key, false);
} /**
* 存储int数据类型
*
* @param key
* @param value
*/
public static void saveInt(String key, int value) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
Editor editor = sp.edit();
editor.putInt(key, value);
editor.commit();
} /**
* 返回int类型数据,默认是true;
*
* @param key
* @return
*/
public static int getInt(String key) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
return sp.getInt(key, 0);
} /**
* 存储float数据类型
*
* @param key
* @param value
*/
public static void saveFloat(String key, float value) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
Editor editor = sp.edit();
editor.putFloat(key, value);
editor.commit();
} /**
* 返回float类型数据,默认是true;
*
* @param key
* @return
*/
public static float getFloat(String key) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
return sp.getFloat(key, 0);
} /**
* 存储long数据类型
*
* @param key
* @param value
*/
public static void saveLong(String key, long value) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
Editor editor = sp.edit();
editor.putLong(key, value);
editor.commit();
} /**
* 返回long类型数据,默认是true;
*
* @param key
* @return
*/
public static long getLong(String key) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
return sp.getLong(key, 0); }
}

SPUtil

  SPUtil作为一个工具类,封装了SharedPreferences的基本所有的静态写入、读取方法。包含int long String boolean 以及复杂的对象。可以快速的实现SharedPreferences的操作。具体在apps里面常用于一些系统的配置,比如常见
的在个人设置里面会有是否允许消息推送、是否自动检测版本更新的checkbox。我试过有的项目的这些设置的存储也通过网络存储在服务器,但大部分都是存储在本地。另外有时候遇到过一些listview里面的数据集合的简单缓存以及读取,也没必
要劳师动众的建sqlte表,直接做对象序列号存储,有时候可以省很多的事情。下一篇将开始讲解sqlite的数据存储,如果有什么建议,可以给我留言。

 

Base-Android快速开发框架(二)--数据存储之SharedPreferences的更多相关文章

  1. Base-Android快速开发框架(三)--数据存储之SQLite

    SQLite,是一款轻量级的关系型数据库,Android原生集成的一个数据库.具有轻量级.独立性.隔离性.安全性等特点.是Android做数据存储的必备知识之一. 在实际的项目中,我们常用于一些对象的 ...

  2. Android开发手记(16) 数据存储一 SharedPreferences

    Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 SharedPreferenc ...

  3. Android数据存储-通过SharedPreferences实现记住密码的操作

    在Android中登陆中,为了实现用户的方便,往往需要根据用户的需要进行记住密码的操作,所以,在Android数据存储中SharedPreferences恰恰可以实现这一点 下面,小编将带领大家通过S ...

  4. android数据存储之SharedPreferences

    一.SharedPreferences简介      (1)SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activ ...

  5. Android快速开发框架ZBLibrary源码分享

    坐标标准库ZBLibrary,是一个MVP架构的Android快速开发框架,提供一套开发标准(UI,Data,Listener)以及模板和工具类并规范代码. 封装层级少,简单高效兼容性好.Androi ...

  6. Android快速开发框架汇总

    知乎贴:Android 开发有什么好的架构么? 里面这篇不错:Architecting Android…The clean way? 知乎贴: 一.如果对App的性能.包size有要求,对代码有洁癖不 ...

  7. Android快速实现二维码扫描--Zbar

    Android中二维码扫描的最常用库是zxing和zbar,上一篇<Android快速实现二维码扫描–Zxing>介绍了Zxing.这次说Zbar,Zbar速度极快,我就比较常用,项目地址 ...

  8. AndroidAnnotations(Code Diet)android快速开发框架

    最近用了一款很不错的android快速开发框架,1000行的代码瞬间变成几百行,不用你会后悔的 特点: (1) 依赖注入:包括view,extras,系统服务,资源等等(2) 简单的线程模型,通过an ...

  9. [原] Android快速开发框架-AndroidFine,GitHub开源

    Android快速开发框架 UI组件,不止是简单整合,更易用 沉浸式状态栏,界面更漂亮 左滑返回,非常流畅 简单.可复用.易扩展的底部导航 PagerSlidingTabStrip,导航标签文字颜色和 ...

随机推荐

  1. 5.0:Spring-bean的加载

    内容来自<Spring深度解析>,之后的不一一复述! 在Spring中,最基本的IOC容器接口是BeanFactory - 这个接口为具体的IOC容器的实现作了最基本的功能规定 - 不管怎 ...

  2. 4.2 spring-import 标签的解析;

    对于spring配置文件的编写,我想,对于经历过庞大项目的人,都有那种恐惧的心理,太多的配置文件.不过,分模块都是大多数人能想到的方法,但是,怎么分模块,那就是仁者见仁,智者见智了.我的策略是使用im ...

  3. 【转】Spring+Hibernate+EHcache配置(一)

    大量数据流动是web应用性能问题常见的原因,而缓存被广泛的用于优化数据库应用.cache被设计为通过保存从数据库里load的数据来减少应用和数据库之间的数据流动.数据库访问只有当检索的数据不在cach ...

  4. 用css制作三角形

    用css制作三角形,主要是利用css元素给“盒模型”设置边框得到的. 上图,上边框和做边框,以及上边框和右边框的交合处,浏览器会按照直角的二分之一处绘制交合线.这是“盒模型”有宽和高时候的效果.我们假 ...

  5. Nagios的安装配置与应用之五监控远程Linux服务器

    本文出自 “曹坏水” 博客,请务必保留此出处http://cao2012.blog.51cto.com/366908/1132113 NRPE是Nagios的一个功能扩展,它可在远程Linux和UNI ...

  6. poj 3318 Matrix Multiplication 随机化算法

    方法1:暴力法 矩阵乘法+优化可以卡时间过的. 方法2:随机化 随机构造向量x[1..n],则有xAB=xC;这样可以将小运算至O(n^2). 代码如下: #include<iostream&g ...

  7. hbase总结:如何监控region的性能

    转载:http://ju.outofmemory.cn/entry/50064 随着大数据表格应用的驱动,我们的HBase集群越来越大,然而由于机器.网络以及HBase内部的一些不确定性的bug,使得 ...

  8. linux 文件比对总结

    1. 过滤a.log的重复数据 #统计 cat datatest.log|sort|uniq -d |wc -l #放入b.log cat datatest.log|sort|uniq -d > ...

  9. 使用FileZilla Server轻松搭建个人FTP服务器

    Linux平台下快速搭建FTP服务器 服务器FTP Server环境搭建 针对以上遇到的问题的解决方案如下: 1)如何上传文件到云服务器上          关于这个问题,我首先想到的是使用FileZ ...

  10. WPF控件模板和数据模板

    来自:http://www.th7.cn/Program/WPF/2011/12/21/51676.shtml ControlTemplate用于描述控件本身. 使用TemplateBinding来绑 ...