作者:林冠宏 / 指尖下的幽靈
一直以來,我都是極其反感寫重複的代碼,是以喜歡利用面向對象的程式設計屬性來自己造輪,或者是二次封裝。
<code>GreenDao</code> 相信很多 <code>Android</code> 開發者都熟悉,不知為何物的,這裡不會再介紹它,建議自行百度,介紹文很多。
前天我再次在項目中使用到 <code>Sqlite</code> 來做緩存,一般的代碼是下面這樣的。
表結構有多少個字段就寫多少行,表多了還要分開寫。<code>GreenDao</code>本身已經是很友善了,但我覺得還是不夠友善。是以有了下面的"故事"。閱讀完這個"故事",從此你使用 GreenDao 真正需要你手寫的将會單表是不超過10行!
做過服務端開發的都知道,一般 <code>C/S</code> 通訊采用的資料結構是 <code>Json</code>,當你們公司的後端人員做好了接口後,也會提供測試接口給前端開發者,因為我的APP接口一般也是我寫,是以我有這個習慣,是以,為何不采用 <code>Json</code>的格式來動态生成 <code>用戶端</code>所需要的所有類。故,選擇讀取<code>Json</code>
由于上述是 Java 程式,是以不能使用 Android 的 Json 包,我們需要下面的幾個 Jar 包,他們的作用的,在 Java 程式了裡面使用到 Json 的操作 API,我們可以在解析完之後就不再引用這些 Jar 包。文末會提供
利用 Java 關鍵字 instanceof 針對從 Json 裡面解析出來的 value 的不同類型來生成不同的屬性,Key 做字段名稱,例如 <code>{"name":"lgh"}</code>,解析出來就是 <code>name</code> 作為字段名詞,由于 <code>lgh</code> 是字元串,是以對應的是字元串類型。
在指定的路徑<code>/greendaohelper/src/main/java</code>下生成檔案夾<code>dao</code>,裡面包含有

其中<code>lghTable</code> 和 <code>pushVideo</code> 就是我們生成的 Bean 類,Dao字尾的就是資料表配置類
事實證明,完美符合理想的結果 。
上述講述了如何自動快速地使用 Json 快速生成 Bean、表及其結構,我覺得還是不夠爽,能更點地調用就更過瘾了。
把 增、删、改、查,采用<code>泛型</code>抽象出來。
添加或更新一條
注意這個函數,它是标準的插入或更新一條資料,存在則更新,否則就是插入,兩個泛型類型 <code>K</code> 和 <code>T</code>,K 是 Bean 類,就是上面生成的, T 是dao 資料表配置類,也是上面生成的。到了這裡,就是說,傳入的泛型也是自動生成的,你完全不需要去手動打碼。
上面說的 T 泛型是屬于 Dao 的配置類,稍作代碼分析就可以看出,GreenDao 所有生成的資料表配置類都是繼承于 <code>AbstractDao</code> 類。
是以,操作抽象類長這樣
有了上面的準備,就可以使用了,正在需要自己動手的代碼幾乎沒有。下面我們建一個操作類型的子類<code>VideoInfoDbCache</code>,內建于 <code>DBInterface</code>,重寫完三個抽象函數後,就是下面這樣。
現在我們看看 MainActivity 裡面的使用。直接采用匿名對象,直接 new,直接用。
現在,夠快了吧?還不夠?您請留言,我補刀。
提示:在編譯APP的時候,最好把上述的 Java 程式的 json jar 包全部不再引用,而且注釋 dao.java 檔案,然後删除一次 greenDaoHelper library下的build檔案夾,即可!
、