用Gson和SharedPreferences轻松构建android本地数据缓存

来源:互联网 发布:驱鼠器真的有用吗 知乎 编辑:程序博客网 时间:2024/05/02 01:49

原文:http://blog.csdn.net/gonjay/article/details/13509321

做Android本地数据的存储无非就是

1 使用SharedPreferences存储数据

2 文件存储数据

3 SQLite数据库存储数据

4 使用ContentProvider存储数据

这些方式已经被用烂了,第一个在存储用户设置比较多,第二个用在图片缓存游戏数据混村等,第三个使用数据库功能上来说是最强大的,结合一些ORM类,可以构建很丰富的应用,很多需要和服务端交互的数据都会走SQLite。

按照传统Java的习惯,对于多个对象的数据,使用SQLite是最轻松就能想到的,但使用SQLite还需要自己写一个DBHelper,这对于有多年Java数据库经验的人而言自然是很熟练,但是在实际的Android项目开发中,你需要关注UI、用户体验、产品和逻辑,很难有精力自己去实现这样一套东西,而且就算幸苦做出来,在使用的时候也会遇到各种麻烦的事情,总之在本地使用数据库真的是一件非常吃力不讨好的事情。

当然,如果单纯的使用SharedPreferences,你只能存一些键值对,这对于丰富的UI交互与数据交互的Android平台而言实在太麻烦了,我也一直在为这个问题困扰,开发Android的时候总感觉快不起来。

另外一个困扰我的问题就是对于服务端返回的JSON数据,经常需要解析,总是要实现一套JSON解析的工具,因为不同的项目和不同数据交互,处理的JSON对象往往不同,很是头疼。然而自从接触了谷歌的Gson之后,处理起JSON的效率一下就有了质的飞跃,特么原来还有这么爽的工具,做梦都要笑醒了。

再回过头看看Android客户端的本地数据缓存,再看看JSON数据,我便拿起Gson,将对象变成JSON String存到了SharedPreferences里面,取用的时候把JSON String用Gson实例化为对象,立刻就能在UI层面上setText(user.name)了,还有比这更爽的方式吗?

下面是一些实践中使用过的代码片段:

[java] view plaincopyprint?
  1. public class UserUtils {  
  2.     public static String getUserInfo() {  
  3.         SharedPreferences pref = getAppContext().getSharedPreferences(  
  4.                 "user_login"0);  
  5.             return pref.getString("user_info""");  
  6.     }  
  7.     public static boolean saveUserInfo(String info) {  
  8.         SharedPreferences pref = getAppContext().getSharedPreferences(  
  9.                 "user_login"0);  
  10.         return pref.edit().putString("user_info", info).commit();  
  11.     }  
  12. }  
在使用的时候,如果服务端返回一个User的JSON数据,那么我们可以这样:
[html] view plaincopyprint?
  1. Gson gson = new Gson();  
  2. User user = gson.fromJson(response, User.class);  
  3. //对user的变量做一些修改,然后保存  
  4. UserUtils.saveUserInfo(gson.toJson(user));  
  5. //下次使用的时候就可以不用访问网络资源了  
  6. User user = gson.fromJson(UserUtils.getUserInfo(), User.class);  

非常简洁的代码,就能实现一个对象数据的本地持久化缓存,而且使用起来异常灵活,非常高的可拓展性。


最后呢,给大家推荐一些非常好用的Android工具:

AsyncHttpClient、Gson

个人感觉,这两个玩意儿凑到一起,在Android平台上真的是太强大了,前者自己实现了一套异步网络资源请求,不需要自己开新线程,大家可以到它的官方网站上面看看,介绍的很详细,后者我也不多说了,总之,谁用谁知道,哈哈。

0 0
原创粉丝点击