エンジニア男

勉強したことの忘備録としてつらつら書いていきます。

【Android】Firebase Realtime databaseの使い方。

Firebase Realtime databaseの使い方メモ

 

・公式ドキュメント

https://firebase.google.com/docs/database/android/start?hl=ja

 

 

1, アプリに Realtime database SDK を追加する

dependencies {
implementation 'com.google.firebase:firebase-database-ktx:19.3.1'
}

 

2, データベースに書き込む

・SendActivitty.kt

class SendActivity : AppCompatActivity() {

private lateinit var database: DatabaseReference

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
     setContentView(R.layout.activity_register)
database = Firebase.database.reference

setup()
}

private fun setup() {
button_send.setOnClickListener {
val message = editText_input.text.toString()
if (message.isEmpty()) {
Toast.makeText(this, "メッセージを入力してください", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}

writeDB(message)
writeDBs(message)

editText_input.text.clear()
}

fetchMessages()
}

// {key : value} 形式でデータを格納する
private fun writeDB(message: String) {
/**
* child("....") ⇒ データを格納する場所を参照
* setValue("....") ⇒ 引数に渡したデータをデータベースに格納する
**/
database.child("/message")
.setValue(message)
.addOnSuccessListener {
// データの書き込みが成功した際の処理
}
.addOnFailureListener {
// データの書き込みが失敗した際の処理
}
}

// {key : {key : value}} 形式でデータを格納する
private fun writeDBs(message: String) {
// push() ⇒ messages配下の最後尾にデータを追加するためのメソッド
database.child("/messages")
.push()
.setValue(message)
}

// データの読み取り
private fun fetchMessages() {
database.child("/messages")
.addValueEventListener(object : {
override fun onDataChange(snapshot: DataSnapshot) {
snapshot.children.forEach {
println(it.toString())
}
}

override fun onCancelled(error: DatabaseError) {
}
})
}

}



■データの読み取り方

.addValueEventListener ⇒ 指定した処理をトリガーにデータを読み取る。

.addListenerForSingleValueEvent ⇒ データを1回だけ読み取る。

onDataChange()メソッド ⇒ 指定したデータベース参照でデータが変更されるたびに呼び出されるメソッド。

onCancelled()メソッド ⇒ 読み取りがキャンセルされた場合、このメソッドが呼び出される。例: Firebaseデータベースにアクセス権が無いユーザーがアクセスした際などの処理。