对于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. c#无标题窗体点击任务栏图标正常最小化或还原

    FormBorderStyle等于System.Windows.Forms.FormBorderStyle.None的窗体,点击任务栏图标的时候,是不能象标准窗体那样最小化或还原的. protecte ...

  2. JAVA CAS单点登录(SSO) 教程

    一.教程前言 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤 单点登录(SSO):请看百科解释猛击这里打开 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Auth ...

  3. [转载]自定义ASP.NET MVC Html辅助方法 TagBuilder

    在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明.有时候,我们不想重复地写一些HTML代码,或者MS没有提供我们想要的那个HTML标签的Html辅助方法,那么 ...

  4. 汇编Ring 3下实现 HOOK API

    [文章标题]汇编ring3下实现HOOK API [文章作者]nohacks(非安全,hacker0058) [作者主页]hacker0058.ys168.com [文章出处]看雪论坛(bbs.ped ...

  5. Android Activity交互及App交互

    Android交互--------->Intent Activity之间----->Explicit Intent App之间--------->Implicit Intent

  6. Spark中shuffle的触发和调度

    Spark中的shuffle是在干嘛? Shuffle在Spark中即是把父RDD中的KV对按照Key重新分区,从而得到一个新的RDD.也就是说原本同属于父RDD同一个分区的数据需要进入到子RDD的不 ...

  7. 安卓 DevOps:从一次推送命令到生产

    DevOps 是一种广为人知的活动,其主要目的是使软件交付自动化.的确,DevOps 的目标是持续测试.代码质量.功能开发和更轻松地进行维护更新.因此,DevOps 的终极目标之一是让开发者可以执行快 ...

  8. Android SlidingMenu的getSupportActionBar无法找到的解决

    getSupportActionBar()方法不能用 进入Library中的src下找到SlidingFragmentActivity.java,修改 public class SlidingFrag ...

  9. 【无聊放个模板系列】BZOJ 1597 斜率优化

    STL 双向队列DEQUE版本 #include<cstdio> #include<cstdlib> #include<cstring> #include<i ...

  10. SaaS系列介绍之二: SaaS介绍

    1 引言 横看成岭侧成峰,远近高低各不同. 不识庐山真面目, 只缘身在此山中.                                                  ________苏轼, ...