---
# System prepended metadata

title: 'Firebase with Android Studio part-5 : Using FireStore to save data'
tags: [Firebase, Android, kotlin]

---

# Firebase with Android Studio part-5 : Using FireStore to save data

## 開始吧

### 前置作業
* 參考[Part-1](https://hackmd.io/OVJ6GLpPR_Kb5kA-85kdgQ?view)
* 但這次主角是Cloud FireStore
![](https://i.imgur.com/BohkBiM.png)

### UI就簡單配置吧

![](https://i.imgur.com/q8jkzxW.png)

### 定義data class
```kotlin=
data class Person(
    var firstName: String,
    var lastName: String,
    var age: Int
)
```

### 功能實作
* 新增資料使用 CollectionReference的add功能就完成了

```kotlin=
class MainActivity : AppCompatActivity() {

    //定義fireStore要儲存資料的參照路徑
    private val personCollectionRef = Firebase.firestore.collection("Persons")

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        findViewById<Button>(R.id.upload).setOnClickListener {
            val firstName = findViewById<EditText>(R.id.ed_firstName).text.toString()
            val lastName = findViewById<EditText>(R.id.ed_lastName).text.toString()
            val age = findViewById<EditText>(R.id.ed_age).text.toString().toInt()
            savePerson(Person(firstName, lastName, age))
        }
    }

    private fun savePerson(person: Person) = CoroutineScope(Dispatchers.IO).launch {
        try {
            personCollectionRef.add(person).await()
            withContext(Dispatchers.Main){
                Toast.makeText(this@MainActivity,"儲存成功", Toast.LENGTH_LONG).show()
            }
        }catch (e:Exception){
            withContext(Dispatchers.Main){
                Toast.makeText(this@MainActivity,e.message, Toast.LENGTH_LONG).show()
            }
        }
    }
}
```

### 到fireStore建立資料庫

![](https://i.imgur.com/Lj8nIAD.png)
* 我先以測試模式啟用
![](https://i.imgur.com/cys6lJf.png)
* 選擇伺服器位置，會根據所在地影響讀寫速度
![](https://i.imgur.com/VAGbYgl.png)
* 剛建立完成，是一個空的集合
![](https://i.imgur.com/5h7Gr2O.png)

### 執行app

![](https://i.imgur.com/dmeXJPm.png)

* 當Toast顯示成功之後，重新整理foreStore就會看到剛剛新增的資料了
![](https://i.imgur.com/R3dJvVQ.png)
* 再新增第二筆資料看看~~
![](https://i.imgur.com/bV8o5Xe.png)


### 看看FireStore的資料結構
* 它的集合(collection)像是我們一般資料庫的資料表(Table)
* 它的文件(document)像是資料表裡面的單一筆資料，每個文件的ID都是唯一的。


###### tags: `Firebase` `kotlin` `Android`