Cloud Firestore lets your app save and get data from the cloud easily. It helps your app share data between users and devices in real time.
Cloud Firestore integration in Android Kotlin
val db = FirebaseFirestore.getInstance() db.collection("collectionName").document("docId").set(dataMap) .addOnSuccessListener { /* success code */ } .addOnFailureListener { /* failure code */ }
Use getInstance() to get the Firestore database object.
Use collection() and document() to point to where you want to save or read data.
val db = FirebaseFirestore.getInstance() // Save data to a document val user = hashMapOf("name" to "Alice", "age" to 25) db.collection("users").document("user1").set(user)
val db = FirebaseFirestore.getInstance() // Read data from a document val docRef = db.collection("users").document("user1") docRef.get().addOnSuccessListener { document -> if (document != null && document.exists()) { val name = document.getString("name") } }
val db = FirebaseFirestore.getInstance() // Listen for real-time updates val docRef = db.collection("users").document("user1") docRef.addSnapshotListener { snapshot, e -> if (e != null) return@addSnapshotListener if (snapshot != null && snapshot.exists()) { val age = snapshot.getLong("age") } }
This app saves a user named Bob with age 30 to Firestore. It shows a message on screen if saving worked or failed.
import android.os.Bundle import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import com.google.firebase.firestore.FirebaseFirestore class MainActivity : AppCompatActivity() { private lateinit var db: FirebaseFirestore private lateinit var textView: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) textView = TextView(this) setContentView(textView) db = FirebaseFirestore.getInstance() val user = hashMapOf("name" to "Bob", "age" to 30) db.collection("users").document("user1").set(user) .addOnSuccessListener { textView.text = "User saved successfully" } .addOnFailureListener { textView.text = "Failed to save user" } } }
Make sure to add Firebase to your Android project and include Firestore dependencies.
Firestore operations are asynchronous, so use listeners to handle success or failure.
Always check for null or errors when reading data to avoid crashes.
Cloud Firestore stores and syncs app data in the cloud.
Use FirebaseFirestore.getInstance() to start using Firestore.
Save, read, and listen to data with simple Kotlin code and listeners.
Practice
Solution
Step 1: Understand Cloud Firestore's role
Cloud Firestore is a cloud database service that stores and syncs app data.Step 2: Differentiate from other app functions
UI design, code compilation, and permission management are handled by other tools, not Firestore.Final Answer:
To store and sync app data in the cloud -> Option CQuick Check:
Cloud Firestore = Data storage and sync [OK]
- Confusing Firestore with UI design tools
- Thinking Firestore compiles code
- Assuming Firestore manages app permissions
Solution
Step 1: Recall Firestore initialization syntax
The official way to get Firestore instance in Kotlin is FirebaseFirestore.getInstance().Step 2: Check other options for correctness
Other options use incorrect class or method names not in Firestore API.Final Answer:
val db = FirebaseFirestore.getInstance() -> Option AQuick Check:
Correct Firestore init = val db = FirebaseFirestore.getInstance() [OK]
- Using Firestore.getInstance() which does not exist
- Confusing FirebaseFirestore with Firebase class
- Using FirestoreClient which is not part of Android SDK
val db = FirebaseFirestore.getInstance()
db.collection("users").document("user1").get()
.addOnSuccessListener { document ->
if (document != null && document.exists()) {
println(document.getString("name"))
} else {
println("No such document")
}
}Solution
Step 1: Understand the get() and success listener
The get() fetches the document asynchronously; if it exists, the listener runs the success block.Step 2: Check document existence and print field
Since document exists and has "name" = "Alice", println(document.getString("name")) prints "Alice".Final Answer:
Alice -> Option AQuick Check:
Document exists with name = Alice [OK]
- Assuming document is null when it exists
- Expecting 'No such document' incorrectly
- Confusing getString with get() returning document
val db = FirebaseFirestore.getInstance()
db.collection("users").document("user1").set("name", "Bob")Solution
Step 1: Check set() method signature
set() expects a single argument: a Map or an object representing fields and values.Step 2: Analyze the provided code
Passing two parameters "name", "Bob" is invalid and causes a compile error.Final Answer:
set() requires a Map or an object, not two parameters -> Option DQuick Check:
set() needs one argument (Map/object) [OK]
- Passing multiple parameters to set() instead of a Map
- Calling document() after set() instead of before
- Thinking collection name restrictions cause error
Solution
Step 1: Understand real-time listeners in Firestore
addSnapshotListener listens for real-time updates on a collection or document.Step 2: Analyze each option
db.collection("messages").addSnapshotListener { snapshots, e -> if (e != null) { println("Listen failed") } else { for (doc in snapshots!!) { println(doc.getString("text")) } } } correctly uses addSnapshotListener on collection with error check and iterates snapshots. db.collection("messages").get().addOnSuccessListener { snapshots -> for (doc in snapshots) { println(doc.getString("text")) } } uses get() which is one-time fetch. db.collection("messages").document().addSnapshotListener { doc, e -> println(doc?.getString("text")) } listens on a document without specifying ID. db.collection("messages").addListener { snapshots -> println(snapshots) } uses non-existent addListener method.Final Answer:
db.collection("messages").addSnapshotListener { snapshots, e -> if (e != null) { println("Listen failed") } else { for (doc in snapshots!!) { println(doc.getString("text")) } } } -> Option BQuick Check:
Real-time listener = addSnapshotListener on collection [OK]
- Using get() instead of addSnapshotListener for real-time
- Calling addSnapshotListener on document without ID
- Using non-existent addListener method
Ready to prove it?
Pass the test and this pattern moves unknown
