Base-Android快速开发框架(二)--数据存储之SharedPreferences
2015-11-11 09:01
387 查看
对于App开发者,抽象来说,其实就是将数据以各种各样的方式展示在用户面前以及采集用户的数据。采集用户的数据包括用户的输入、触摸、传感器等,展示的数据通过网络来源于各业务系统,以及用户的
输入数据。在这个过程中,数据存储显得由为重要。这也是我做为开端讲解的目的。良好的运用数据存储,不仅的能有效减少访问服务器的次数、用户的流量,还能加快App的响应速度,甚至简化应用的业务逻辑。数据
存储这一块将介绍常用的2种数据缓存方式,AndroidSharedPreferences文件数据存储作为一章,sqlite作为一章。另外我这一系列的介绍都不会有介绍基础的api,适合有一定基础的童鞋。
简单粗暴,开始SharedPreferences。SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置。是以xml方式来保存,整体效率来看不是特别的高,对于常规的轻量级而言比SQLite
要好不少,xml处理时Dalvik会通过自带底层的本地XMLParser解析。下面直接上代码。
SPUtil
输入数据。在这个过程中,数据存储显得由为重要。这也是我做为开端讲解的目的。良好的运用数据存储,不仅的能有效减少访问服务器的次数、用户的流量,还能加快App的响应速度,甚至简化应用的业务逻辑。数据
存储这一块将介绍常用的2种数据缓存方式,AndroidSharedPreferences文件数据存储作为一章,sqlite作为一章。另外我这一系列的介绍都不会有介绍基础的api,适合有一定基础的童鞋。
简单粗暴,开始SharedPreferences。SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置。是以xml方式来保存,整体效率来看不是特别的高,对于常规的轻量级而言比SQLite
要好不少,xml处理时Dalvik会通过自带底层的本地XMLParser解析。下面直接上代码。
/** *SharedPreferences数据存储工具类 * * */ publicclassSPUtil{ privatestaticStringPreferenceName="Constant"; /** *储存复杂的数据对象字段 * *@paramkey *@paramt *@return */ publicstatic<T>booleansaveObjectToShare(Stringkey,Tt){ returnsaveObjectToShare(AppContext.getApplication(),PreferenceName, key,t); } /** *储存复杂的数据字段对象 * *@paramcontext *@paramkey *@paramt *@return */ publicstatic<T>booleansaveObjectToShare(Contextcontext,Stringkey,Tt){ returnsaveObjectToShare(context,PreferenceName,key,t); } /** * *@paramcontext *@paramname *@paramkey *@paramt *@return */ publicstatic<T>booleansaveObjectToShare(Contextcontext,Stringname, Stringkey,Tt){ try{ SharedPreferencessp=context.getSharedPreferences(name, Context.MODE_PRIVATE); //存储 Editoreditor=sp.edit(); if(t==null){ editor.putString(key,""); editor.commit(); returntrue; } ByteArrayOutputStreamtoByte=newByteArrayOutputStream(); ObjectOutputStreamoos; oos=newObjectOutputStream(toByte); oos.writeObject(t); //对byte[]进行Base64编码 StringpayCityMapBase64=newString(Base64.encode( toByte.toByteArray(),Base64.DEFAULT)); editor.putString(key,payCityMapBase64); editor.commit(); returntrue; }catch(IOExceptione){ e.printStackTrace(); returnfalse; } } /** *得到复杂的数据对象 * *@paramkey *@return */ publicstatic<T>TgetObjectFromShare(Stringkey){ returngetObjectFromShare(AppContext.getApplication(),PreferenceName, key); } /** *得到复杂的数据对象 * *@paramcontext *@paramkey *@return */ publicstatic<T>TgetObjectFromShare(Contextcontext,Stringkey){ returngetObjectFromShare(context,PreferenceName,key); } /** *得到复杂的数据对象 * *@paramkey *@paramobject */ @SuppressWarnings("unchecked") publicstatic<T>TgetObjectFromShare(Contextcontext,Stringname, Stringkey){ try{ SharedPreferencessp=context.getSharedPreferences(name, Context.MODE_PRIVATE); StringpayCityMapBase64=sp.getString(key,""); if(payCityMapBase64.length()==0){ returnnull; } byte[]base64Bytes=Base64 .decode(payCityMapBase64,Base64.DEFAULT); ByteArrayInputStreambais=newByteArrayInputStream(base64Bytes); ObjectInputStreamois=newObjectInputStream(bais); return(T)ois.readObject(); }catch(Exceptione){ e.printStackTrace(); } returnnull; } /** *返回String类型数据,默认是“”; * *@paramkey *@return */ publicstaticStringgetString(Stringkey){ SharedPreferencessp=AppContext.getApplication() .getSharedPreferences(PreferenceName,Context.MODE_PRIVATE); returnsp.getString(key,""); } /** *存储boolean数据类型 * *@paramkey *@paramvalue */ publicstaticvoidsaveboolean(Stringkey,booleanvalue){ SharedPreferencessp=AppContext.getApplication() .getSharedPreferences(PreferenceName,Context.MODE_PRIVATE); Editoreditor=sp.edit(); editor.putBoolean(key,value); editor.commit(); } /** *返回boolean类型数据,默认是true; * *@paramkey *@return */ publicstaticbooleangetBoolean(Stringkey){ SharedPreferencessp=AppContext.getApplication() .getSharedPreferences(PreferenceName,Context.MODE_PRIVATE); returnsp.getBoolean(key,false); } /** *存储int数据类型 * *@paramkey *@paramvalue */ publicstaticvoidsaveInt(Stringkey,intvalue){ SharedPreferencessp=AppContext.getApplication() .getSharedPreferences(PreferenceName,Context.MODE_PRIVATE); Editoreditor=sp.edit(); editor.putInt(key,value); editor.commit(); } /** *返回int类型数据,默认是true; * *@paramkey *@return */ publicstaticintgetInt(Stringkey){ SharedPreferencessp=AppContext.getApplication() .getSharedPreferences(PreferenceName,Context.MODE_PRIVATE); returnsp.getInt(key,0); } /** *存储float数据类型 * *@paramkey *@paramvalue */ publicstaticvoidsaveFloat(Stringkey,floatvalue){ SharedPreferencessp=AppContext.getApplication() .getSharedPreferences(PreferenceName,Context.MODE_PRIVATE); Editoreditor=sp.edit(); editor.putFloat(key,value); editor.commit(); } /** *返回float类型数据,默认是true; * *@paramkey *@return */ publicstaticfloatgetFloat(Stringkey){ SharedPreferencessp=AppContext.getApplication() .getSharedPreferences(PreferenceName,Context.MODE_PRIVATE); returnsp.getFloat(key,0); } /** *存储long数据类型 * *@paramkey *@paramvalue */ publicstaticvoidsaveLong(Stringkey,longvalue){ SharedPreferencessp=AppContext.getApplication() .getSharedPreferences(PreferenceName,Context.MODE_PRIVATE); Editoreditor=sp.edit(); editor.putLong(key,value); editor.commit(); } /** *返回long类型数据,默认是true; * *@paramkey *@return */ publicstaticlonggetLong(Stringkey){ SharedPreferencessp=AppContext.getApplication() .getSharedPreferences(PreferenceName,Context.MODE_PRIVATE); returnsp.getLong(key,0); } }
SPUtil
SPUtil作为一个工具类,封装了SharedPreferences的基本所有的静态写入、读取方法。包含intlongStringboolean以及复杂的对象。可以快速的实现SharedPreferences的操作。具体在apps里面常用于一些系统的配置,比如常见 的在个人设置里面会有是否允许消息推送、是否自动检测版本更新的checkbox。我试过有的项目的这些设置的存储也通过网络存储在服务器,但大部分都是存储在本地。另外有时候遇到过一些listview里面的数据集合的简单缓存以及读取,也没必 要劳师动众的建sqlte表,直接做对象序列号存储,有时候可以省很多的事情。下一篇将开始讲解sqlite的数据存储,如果有什么建议,可以给我留言。
相关文章推荐
- Android笔记(五十五) Android四大组件之一——ContentProvider,使用系统提供的ContentProvider
- Android acache读后感
- Android studio Json 转换对象 Bean 插件 GsonFormat 的安装以及使用
- Android极光推送
- Android天氣預報的開發分析
- Android图片显示之通过handler机制实现数据通讯
- 请求权限被拒绝的检测及处理
- Android中Canvas绘图基础详解(附源码下载)
- android基础---Activity和Intent
- Android 登录判断器,登录成功后帮你准确跳转到目标activity
- AndroidStudio中添加第三库文件的方法
- Android Studio用patch更新方法
- Android雷达扫描动态界面制作
- window7 64位下Android studio 安装genymotion模拟器
- 我的人生转折点 蜂窝教育Android培训
- Android拨号键盘增加魔力爱心数字
- Android5.1.1源码 - 分析Android系统服务何时被添加到ServiceManager
- Android的三种储存方式
- Android Studio Gradle 导出JavaDocJar提示编码GBK的字符无法映射解决
- Android数据库小记