用Gson和SharedPreferences輕鬆構建android本地數據緩存


剛剛看了一篇IBM的博客,講的是Android本地數據存儲API,感覺實在是太複雜了,對於大部分個人開發者而言,按照這種方式來做自己的項目,實在是一件極其痛苦的事情,作爲一名敏捷開發的信徒,實在難以忍受按照IBM那套來做事情,下面給大家介紹一下個人在實踐中總結出來的一套數據存儲的方法。

做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)了,還有比這更爽的方式嗎?

下面是一些實踐中使用過的代碼片段:

public class UserUtils {
    public static String getUserInfo() {
    	SharedPreferences pref = getAppContext().getSharedPreferences(
                "user_login", 0);
            return pref.getString("user_info", "");
    }
    public static boolean saveUserInfo(String info) {
    	SharedPreferences pref = getAppContext().getSharedPreferences(
                "user_login", 0);
    	return pref.edit().putString("user_info", info).commit();
    }
}
在使用的時候,如果服務端返回一個User的JSON數據,那麼我們可以這樣:
  Gson gson = new Gson();
  User user = gson.fromJson(response, User.class);
  //對user的變量做一些修改,然後保存
  UserUtils.saveUserInfo(gson.toJson(user));
  //下次使用的時候就可以不用訪問網絡資源了
  User user = gson.fromJson(UserUtils.getUserInfo(), User.class);

非常簡潔的代碼,就能實現一個對象數據的本地持久化緩存,而且使用起來異常靈活,非常高的可拓展性。


最後呢,給大家推薦一些非常好用的Android工具:

AsyncHttpClient、Gson

個人感覺,這兩個玩意兒湊到一起,在Android平臺上真的是太強大了,前者自己實現了一套異步網絡資源請求,不需要自己開新線程,大家可以到它的官方網站上面看看,介紹的很詳細,後者我也不多說了,總之,誰用誰知道,哈哈。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章