Firebase Realtime Database and Firestore in Android Development


Firebase offers two cloud-hosted database solutions for Android app development: the Firebase Realtime Database and Firestore. Both provide scalable, real-time data synchronization and offline support. This article explains their features and demonstrates how to use them in an Android app with Kotlin examples.

1. Firebase Realtime Database

The Firebase Realtime Database is a NoSQL cloud-hosted database that stores data as JSON and synchronizes data in real time across connected clients.

Adding Realtime Database to Your Project

    dependencies {
        implementation platform('com.google.firebase:firebase-bom:32.0.0')
        implementation 'com.google.firebase:firebase-database-ktx'
    }
        

Writing Data

Write data to the Realtime Database using setValue().

    val database = Firebase.database
    val myRef = database.getReference("message")

    myRef.setValue("Hello, Firebase Realtime Database!")
        .addOnSuccessListener {
            println("Data written successfully.")
        }
        .addOnFailureListener { e ->
            println("Failed to write data: ${e.message}")
        }
        

Reading Data

Read data using addValueEventListener() or addListenerForSingleValueEvent().

    val database = Firebase.database
    val myRef = database.getReference("message")

    myRef.addValueEventListener(object : ValueEventListener {
        override fun onDataChange(snapshot: DataSnapshot) {
            val value = snapshot.getValue(String::class.java)
            println("Value is: $value")
        }

        override fun onCancelled(error: DatabaseError) {
            println("Failed to read value: ${error.message}")
        }
    })
        

2. Firebase Firestore

Firestore is Firebase's modern, scalable NoSQL database that stores data in documents organized into collections. It supports advanced querying, offline access, and real-time synchronization.

Adding Firestore to Your Project

    dependencies {
        implementation platform('com.google.firebase:firebase-bom:32.0.0')
        implementation 'com.google.firebase:firebase-firestore-ktx'
    }
        

Writing Data

Write data to Firestore using the set() or add() methods.

    val db = Firebase.firestore

    val user = hashMapOf(
        "first" to "John",
        "last" to "Doe",
        "age" to 30
    )

    db.collection("users")
        .add(user)
        .addOnSuccessListener { documentReference ->
            println("Document added with ID: ${documentReference.id}")
        }
        .addOnFailureListener { e ->
            println("Error adding document: ${e.message}")
        }
        

Reading Data

Use the get() method to retrieve data from Firestore.

    db.collection("users")
        .get()
        .addOnSuccessListener { result ->
            for (document in result) {
                println("${document.id} => ${document.data}")
            }
        }
        .addOnFailureListener { e ->
            println("Error getting documents: ${e.message}")
        }
        

Listening for Real-Time Updates

    db.collection("users")
        .addSnapshotListener { snapshots, e ->
            if (e != null) {
                println("Listen failed: ${e.message}")
                return@addSnapshotListener
            }

            for (doc in snapshots!!) {
                println("Current data: ${doc.id} => ${doc.data}")
            }
        }
        

3. Choosing Between Realtime Database and Firestore

  • Use Realtime Database if you need low-latency updates and a simpler data structure.
  • Use Firestore if you need advanced querying, scalability, and more structured data.

4. Offline Capabilities

Both databases support offline functionality, automatically syncing data when the device reconnects to the network.

    // Enabling offline persistence for Firestore
    Firebase.firestore.firestoreSettings = firestoreSettings {
        isPersistenceEnabled = true
    }
        

Conclusion

Firebase Realtime Database and Firestore are powerful tools for managing data in Android apps. Choose the database that fits your app's requirements and start integrating Firebase for real-time, scalable data management.





Advertisement