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

聊聊的Android缓存(三)

2016-04-23 11:46 337 查看

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的搭建就差不多了,之后讲讲简单的使用。

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