- 當(dāng)下懶人開(kāi)發(fā)越來(lái)越流行,本地的數(shù)據(jù)保存是每個(gè)項(xiàng)目必然會(huì)遇到的,之前我項(xiàng)目中也有使用GreenDao來(lái)進(jìn)行對(duì)象化的數(shù)據(jù)處理,真真的是大大增加了開(kāi)發(fā)效率,而且框架內(nèi)的數(shù)據(jù)轉(zhuǎn)化方面也基本沒(méi)有出過(guò)八阿哥.可是很多人對(duì)別人的框架使用還是很抗拒的,那么下面的一點(diǎn)代碼就能夠很好的幫助你簡(jiǎn)單的實(shí)現(xiàn)數(shù)據(jù)操作。
Talk is cheap , Show me the code.
/**
* @author zhejun.zhu
* @Description:面向?qū)ο蟮腟haredPreference存儲(chǔ)輔助類(lèi)
* @date 2014年11月7日
* <p>
* 適合應(yīng)用內(nèi)信息的存儲(chǔ),當(dāng)數(shù)據(jù)量很大的時(shí)候效率會(huì)很低
*/
public class ObjectSharedPreference {
private static final String DEFAULT_SHARE_NAME = "default_share_object";
private static final String DEFAULT_SHARE_NAME_LIST_APPEND = "_list";
SharedPreferences mPreferences;
public ObjectSharedPreference(Context context) {
mPreferences = context.getSharedPreferences(DEFAULT_SHARE_NAME, Context.MODE_PRIVATE);
}
public ObjectSharedPreference(Context context, String sharedpreferencesName) {
mPreferences = context.getSharedPreferences(sharedpreferencesName, Context.MODE_PRIVATE);
}
public void save(Object object) {
save(object.getClass().getName(), object);
}
public void save(String key, Object object) {
Gson gson = new Gson();
Editor editor = mPreferences.edit();
editor.putString(key, gson.toJson(object));
editor.commit();
}
public <T> T get(Class<T> tClass) {
return get(tClass.getName(), tClass);
}
public <T> T get(String key, Class<T> tClass) {
try {
String value = mPreferences.getString(key, "");
if (TextUtils.isEmpty(value)) {
return null;
}
Gson gson = new Gson();
T t = gson.fromJson(value, tClass);
return t;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public <T> void saveList(List<T> list) {
if (list == null || list.size() == 0)
return;
saveList(list.get(0).getClass().getName() + DEFAULT_SHARE_NAME_LIST_APPEND, list);
}
public <T> void saveList(String key, List<T> list) {
if (list == null || list.size() == 0)
return;
Gson gson = new Gson();
List<String> strlist = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
strlist.add(gson.toJson(list.get(i)));
}
Editor editor = mPreferences.edit();
editor.putString(key, gson.toJson(strlist));
editor.commit();
}
public <T> List<T> getList(Class<T> tClass) {
return getList(tClass.getName() + DEFAULT_SHARE_NAME_LIST_APPEND, tClass);
}
public <T> List<T> getList(String key, Class<T> T) {
try {
String value = mPreferences.getString(key, "");
if (TextUtils.isEmpty(value)) {
return null;
}
Gson gson = new Gson();
Type type = new TypeToken<ArrayList<String>>() {
}.getType();
List<String> strList = gson.fromJson(value, type);
if (strList == null)
return null;
List<T> list = new ArrayList<T>();
for (int i = 0; i < strList.size(); i++) {
list.add(gson.fromJson(strList.get(i), T));
}
return list;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
看了代碼會(huì)發(fā)現(xiàn),其實(shí)實(shí)現(xiàn)很簡(jiǎn)單,ORM相關(guān)的數(shù)據(jù)轉(zhuǎn)化我通過(guò)Gson來(lái)實(shí)現(xiàn)了,數(shù)據(jù)保存在SharePreference里面,所以決定了本面向?qū)ο蟠鎯?chǔ)的特點(diǎn):
- 對(duì)數(shù)據(jù)兼容性非常好,修改對(duì)象的變量能夠完全不需要像數(shù)據(jù)庫(kù)一樣去修改格式
- 數(shù)據(jù)量不大的時(shí)候,性能也是杠杠的,數(shù)據(jù)量越大性能越低(當(dāng)然你可以分開(kāi)Share文件來(lái)存儲(chǔ))
- 線程間安全,但是進(jìn)程間是不安全的(不然要ContentProvider干什么 ╮(╯_╰)╭ ,當(dāng)然API的注釋中說(shuō)會(huì)在高版本的SDK中修復(fù)這個(gè)問(wèn)題)。
-
So 來(lái)看看使用起來(lái)有多簡(jiǎn)單吧
public NewsBean loadNewsLocal() {
ObjectSharedPreference osp = new ObjectSharedPreference(mContext);
NewsBean newsBean = osp.get(NewsBean.class);
return newsBean;
}
public void saveNewsLocal(NewsBean newsBean) {
ObjectSharedPreference osp = new ObjectSharedPreference(mContext);
osp.save(newsBean);
}
就是這么“懶”~
當(dāng)然如果你工程里面沒(méi)有Gson的庫(kù)的話,你需要導(dǎo)入gson.jar
如果你用的Gradle的話
dependencies {
compile 'com.google.code.gson:gson:2.6.2'
或
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
}