Android缓存(二)
继续书接上文,封装了一层SharedPreferences之后,我们的代码就会简洁很多,面向对象的好处之一就是把一个臃肿的大段代码分解成多段小代码,虽然整体上代码量会有所提升,但是清晰度提升了很多,达到一目了然的效果。
我们继续详谈第一篇省略掉的代码,完整的get方法如下:
public synchronized LoginData getLoginData() {{
if (null == loginData) {
String data = ServiceConfigManager.getInstance(
WhyApplication.getAppContext()).getLoginData();
if (!TextUtils.isEmpty(data)) {
loginData= LoginData.getFromJson(data);
}
}
return loginData;
}
我来详细解释一下具体的作用
- 先判断data是否为空,这里有个细节,就是判断为空的时候null应该放在”==”左边,这是一个很好的习惯,如果data为空的话,在一些情况下,可能会出现空指针异常,但是null在左边,就会避免这种情况。
- 接着用ServiceConfigManager获取data的数据,这里的WhyApplication是我自定义的一个Application,前面加上你的项目名称,在使用工具类的时候,有时候为了获取Context,需要引用Application,一般会自定义一个Application,顺便一提Application不比声明成单例的,因为一个应用只有一个Application,它本身就是单例的。
- 紧接着使用TextUtils的函数判断数据是否为空,TextUtils是AndroidSDK提供的一个工具类,isEmpty()的实现也很简单,就是判断传入的字符串是否为null或者字符的长度为0:
public static boolean isEmpty(CharSequence str) {
if (str == null || str.length() == 0)
return true;
else
return false;
}
觉得不过瘾的同学可以自己重新实现一个isEmpty函数,不过感觉这个够用了。
4. 如果data不为空,使用Gson框架的getFromJson函数将data的数据装换成data类型对象,最后返回即可。
set方法相对简单一些:
public synchronized void setLoginData (LoginData loginData) {
if (null==loginData) {
return;
}
String data = LoginData .toJsonString(loginData);
ServiceConfigManager.getInstance(WhyApplication.getAppContext()).setLoginData(loginData);
this.loginData= null;
this.loginData= getLoginData();
}
- 首先还是判断是否为空,如果为空结束函数的执行。
- 还是使用Gson,将data对象转换为String类型,方便下一步存储。
- 之后使用ServiceConfigManager存储data
- 置空loginData
- 重新给loginData赋值
到此,LoginDataHelper的搭建就差不多了,之后讲讲简单的使用。