对于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. linux驱动系列之挂载(转)

    转自网页:http://www.cnblogs.com/yeahgis/archive/2012/04/05/2432779.html http://www.linuxso.com/command/c ...

  2. Eclipse升级到4.4.2后界面主题更改

    在win8.1电脑上一直很喜欢eclipse luna sr1a(4.4.1)版本的界面好像是软件自动设置的. 这几天更新到eclipse luna sr2(4.4.2)版本后发现界面大变,怎么也找不 ...

  3. 1050 棋盘染色 2 - Wikioi

    题目描述 Description 有一个5*N的棋盘,棋盘中的一些格子已经被染成了黑色,你的任务是对最少的格子染色,使得所有的黑色能连成一块. 输入描述 Input Description 第一行一个 ...

  4. smarty 时间格式化date_format

    代码如下:$smarty = new Smarty; $smarty->assign('yesterday', strtotime('-1 day')); $smarty->display ...

  5. Scala的Pattern Matching Anonymous Functions

    参考自http://stackoverflow.com/questions/19478244/how-does-a-case-anonymous-function-really-work-in-sca ...

  6. Generating Huge reports in JasperReports

    There are certain things to care while implementing the Jasper Reports for huge dataset to handle th ...

  7. 用printf做彩色日志记录

    写了一个简单的程序,但是考虑到有一些信息是需要打印在控制台上的,就像在windows上启动apache tomcat时控制台显示的信息一样.琢磨一会儿之后,对printf进行了封装,支持控制台打印日志 ...

  8. hdu 1849 Rabbit and Grass 博弈论

    水题,转化Nim 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #include&l ...

  9. SDUT2157——Greatest Number(STL二分查找)

    Greatest Number 题目描述Saya likes math, because she think math can make her cleverer.One day, Kudo invi ...

  10. linux netcat命令

    netcat是网络工具中的“瑞士军刀”,它能通过TCP和UDP在网络中读写数据.通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它.使用netcat命令所能完成的事情令人惊讶. netcat所 ...