使用Android Studio 2.2.2 開發Firebase – Database篇 part2

作者 | 2016-11-25

 

本篇延續使用Android Studio 2.2.2 開發Firebase – Database篇,將介紹讀取Firebase資料時的另一種讀取方式。

先回顧一下前一篇讀取資料的方式:

前一篇介紹過,Firebase資料存放為JSON格式,每一筆資料、每一個欄位都是節點,讀取資料亦須一個一個讀取。但我們知道實務應用上,一個Table中動輒十多個欄位,少有三五個欄位的Table。在上述程式中一個欄位一個欄位讀取,也不是什麼太困難的事,只是,如此一來會降低程式的可讀性,萬一欄位有個增減或修改也是一大困擾。

mag_as222_db2_01

有沒有更好的方式呢?

mag_as222_db2_04

Firebase的getValue方法取值有幾種方式,上一篇採用的是空參數,不指定資料型態直接取值,現在我們要使用第二個方法,如文件所言,可以將取回的資料自動轉成我們所指定的類別,那不是很好嗎?

1. 設計一個相對應的JavaBean,類別屬性須和Firebase內的名稱相同。

2. 新增容器

ArrayList、HashMap、LinkedHashMap….皆可,將用於存放Firebase取回的資料,此例使用ArrayList ,限定型態為Contact。

3. 替換讀取資料程式碼

換成

如此一來,完全不須逐一讀取欄位,將取回的Contact型態資料放到清單list。

 

咦?adapter到哪裡去了?該怎麼顯示資料呢?

接下來我們要改用RecyclerView顯示資料,此篇重點非RecyclerVew,在此不細述RecyclerView.Adapter,請自行參考官網說明。

1.新增清單

在activity_main.xml加一RecyclerView 設定 id 為 recycler

mag_as222_firebase_db2_03

2. 新增單列顯示Layout

設計一個單筆資料layout,名為row.xml,內含兩個TextView,分別顯示聯絡人名字和電話。

mag_as222_firebase_db2_02

3. 新增一個類別MyRecyclerAdapter,繼承RecyclerView.Adapter

除了實作3個必要方外,須按規格提供一個繼承RecyclerView.ViewHolder的內部類別

ViewHolder有多種寫法,各位可依自己習慣撰寫程式碼。

第5行:建構子傳入要顯示的View

第11行:setValues方法傳入Contact型態物件,將資料填入欲顯示的TextView中。

 

由於前面採用ArrayList存放資料,所以需要將該ArrayList提供給Adapter顯示。

第3行:建構子傳入ArrayList<Contact>。

 

實作3個必要覆寫方法

4. 設定RecyclerView

回到主畫面程式,設定RecyclerView

 

5. 最後記得,讀取完資料後更新清單

mag_as222_firebase_db2_04

小編碎唸:RecyclerView最大好處在節省資源,但RecyclerAdapter的寫法真的有點小累人呀!感謝Firebase還提供了其他更好的方式顯示Firebase資料 (呼~)

Firebase在伺服端資料有任何異動,預設皆能同步回呼firebase的方法,伺服端不須自行撰寫推撥通知手持裝置有資料異動、也無須在手機端向伺服端發送query即可獲取最新資料。不過,此文中得到資料時一律list.add,那有沒有可能是刪除或修改呢?

有機會再來介紹Firebase的CRUD。

相關文章:

使用Facebook直接回應

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *