天天看點

用Gson和SharedPreferences輕松建構android本地資料緩存

用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平台上真的是太強大了,前者自己實作了一套異步網絡資源請求,不需要自己開新線程,大家可以到它的官方網站上面看看,介紹的很詳細,後者我也不多說了,總之,誰用誰知道,哈哈。