对于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. Begin Andriod -- 安装android开发环境

    很久以前学过Andriod,现在已经忘的快没有了,重新捡起来练练,顺带写写博客,感受下写博的乐趣. 第一步:安装java jdk.jre(jdk:开发环境,jre:运行环境). (一)java jdk ...

  2. 第二好用的时间日期选择插件(jscal)

    这个是第二好用的了,支持鼠标滚动选择时间.功能很强大,文档:http://www.dynarch.com/jscal/ 效果图: <!DOCTYPE html PUBLIC            ...

  3. C# DataTable

    http://www.cnblogs.com/xun126/archive/2010/12/30/1921557.html http://msdn.microsoft.com/zh-cn/librar ...

  4. [转]LINQ语句之Select/Distinct和Count/Sum/Min/Max/Avg

    在讲述了LINQ,顺便说了一下Where操作,这篇开始我们继续说LINQ语句,目的让大家从语句的角度了解LINQ,LINQ包括LINQ to Objects.LINQ to DataSets.LINQ ...

  5. static 内部类

    一般情况下是不可以用static修饰类的.如果一定要用static修饰类的话,通常static修饰的是匿名内部类. 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的(利用static ...

  6. 深入浅出ShellExecute

    Q: 如何打开一个应用程序? ShellExecute(this->m_hWnd,"open","calc.exe",""," ...

  7. 关于CreadThread()与CloseHandle()

    今天看了点关于Windows多线程的东西,摘抄点关于CloseHandle的内容放于此,以便以后参考. 主要是<Windows核心编程>里的两小节: 3.1.1 内核对象的使用计数     ...

  8. Qt: 自动调整到最合适的大小(不是很明白)

    SortDialog::SortDialog(QWidget *parent) : QDialog(parent) { setupUi(this); groupBox_2->hide(); gr ...

  9. 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!

    启动 Eclipse 弹出"Failed to load the JNI shared library jvm.dll"错误的解决方法 http://blog.csdn.net/z ...

  10. 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。

    先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比. JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素 复制代码 ...