Android-啟用Firestore資料庫

Vincent Zheng
新手工程師的程式教室
5 min readDec 22, 2018

Firestore是Google的後端服務Firebase所提供的功能之一。它的類型屬於NoSQL,因此牽涉到Collection(集合)與Document(文件)的概念。Firestore還具有即時同步資料的功能,也就是說一旦資料庫有異動,資料便會自動同步到相關的用戶端上(如手機App),端看程式如何設計。

本文將帶領讀者啟用Firestore資料庫,並在Android專案透過程式新增一筆資料,隨後在網頁上檢視。使用的是Kotlin語言。

一、啟用資料庫

首先來到Firebase專案的首頁,點選左邊的「Database」,進入資料庫的首頁。請在Cloud Firestore的區塊點選「建立資料庫」。

資料庫的初次使用首頁

接著需設定資料庫的安全性規則。鎖定模式是只有合法的使用者能存取資料庫,與Authentication功能有關。測試模式是任何存取請求都會被接受,例如在Android專案直接隨便寫個新增資料的程式,是能夠執行成功的。此處為了教學用途,我們選擇測試模式即可,這項設定日後也可修改。

啟動Firestore測試模式

按下啟用後稍等一下,出現下圖的畫面就代表啟用完成了!這個畫面是資料存放的地方,日後應用程式若有新增、查詢、修改或刪除的動作,也能到這裡來檢視結果。

資料存放處的畫面

二、匯入函式庫

在Firebase啟用完成後,接著要在Android專案匯入相關的函式庫。請到專案層級的build.gradle檔案,在下方的dependencies區塊加入:

implementation 'com.google.firebase:firebase-firestore:17.0.1'

如果還沒有匯入Firebase核心函式庫,也請一併加入:

implementation 'com.google.firebase:firebase-core:16.0.1'

以上為2018/12/22的版本號。完畢後請點選右上方的「Sync Now」重新建置專案。

接著開啟「MainActivity.kt」(或其他想顯示的Activity),在「onCreate」方法中宣告Firestore的程式物件:

val db = FirebaseFirestore.getInstance()

若Android Studio沒有出現無法辨識的訊息,就能確認函式庫有設置完成。

三、新增資料

本節將在Firestore透過程式來新增資料。請在Android專案新建一個類別:

class Student(
var stuId: Int = 0,
var name: String = "",
var birthday: String = "") {
}

這是一個「學生」的類別,之後會在資料庫新增物件作為示範。請在MainActivity的onCreate方法撰寫程式,讓我們先建立學生物件:

val student = Student()student.stuId = 10346099
student.name = "Vincent"
student.birthday = "1996/01/01"

接著就能用下面的程式,將資料新增到資料庫中:

資料庫物件.collection("集合名稱").add(要新增的文件)db.collection("Students").add(student)

從字面上來看,意思是在資料庫取得集合(collection),並在裡面新增資料。如果這個集合不存在,到時也會建立一個。

最後將App啟動看看吧!開啟後,onCreate方法會被執行,在資料庫新增一筆資料。這時已經能在Firestore的網頁檢視,但由於是新的集合,因此需要刷新畫面才看得到。

Firestore中的資料展示

四、Firestore的架構

接著簡單地介紹一下Firestore資料庫的架構。

Firestore中的資料編輯

首先最左邊是集合(collection),集合內有文件(document),也就是從用戶端傳送進來的資料。有點像關聯式資料庫的資料表與值組。

在右邊能看到欄位與值,就是上一節在程式中所定義的。另外也能直接在上面修改或刪除。而文件內又可以再包含集合,形成類似樹狀的結構。

在中間有一串英文數字,這是文件的ID,由Firestore自動產生。筆者曾經寫過Spring Boot,在MongoDB新增資料時,也會產生一個ID,如此就能在業務邏輯層透過ID進行查詢、刪除等操作。

要在Android專案的程式中指向這些集合或文件,就是透過「collection」與「document」這兩個方法來表示路徑:

資料庫物件.collection("集合名稱").document("文件ID")db.collection("Students").document("hxfMMuRT7S...")

如果按照這個例子,對document物件使用「set」方法,並傳入物件,甚至能達到以自己定義的文件ID來新增或修改資料的效果。

--

--

Vincent Zheng
新手工程師的程式教室

我是Vincent,是個來自資管系的後端軟體工程師。當初因為學校作業,才踏出寫部落格的第一步。這裡提供程式教學文章,包含自學和工作上用到的經驗,希望能讓讀者學到東西。我的部落已搬家至 https://chikuwa-tech-study.blogspot.com/