聊聊的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的搭建就差不多了,之后讲讲简单的使用。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories