您的位置:首页 > 移动开发 > Android开发

Base-Android快速开发框架(二)--数据存储之SharedPreferences

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

输入数据。在这个过程中,数据存储显得由为重要。这也是我做为开端讲解的目的。良好的运用数据存储,不仅的能有效减少访问服务器的次数、用户的流量,还能加快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的数据存储,如果有什么建议,可以给我留言。



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: