0
0
Android Kotlinmobile~20 mins

Cloud Firestore integration in Android Kotlin - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Firestore Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
ui_behavior
intermediate
2:00remaining
Firestore Data Display Update

You have a Firestore collection named users. You want to display the name field of each user in a RecyclerView. Which code snippet correctly listens for real-time updates and updates the UI?

Android Kotlin
val db = FirebaseFirestore.getInstance()
db.collection("users")
  .addSnapshotListener { snapshots, e ->
    if (e != null) {
      Log.w("Firestore", "Listen failed.", e)
      return@addSnapshotListener
    }
    val userList = mutableListOf<String>()
    for (doc in snapshots!!.documents) {
      userList.add(doc.getString("name") ?: "Unknown")
    }
    // update RecyclerView adapter here with userList
  }
A
db.collection("users").addSnapshotListener { snapshots, e -&gt;
  if (e != null) return@addSnapshotListener
  val userList = mutableListOf&lt;String&gt;()
  for (doc in snapshots!!.documents) {
    userList.add(doc.getString("name") ?: "Unknown")
  }
  // update RecyclerView adapter here
}
B
db.collection("users").get().addOnSuccessListener { result -&gt;
  val userList = result.map { it.getString("name") ?: "Unknown" }
  // update RecyclerView adapter here
}
C
db.collection("users").addSnapshotListener { snapshots, e -&gt;
  if (e != null) return@addSnapshotListener
  val userList = snapshots!!.map { it.getString("name") ?: "Unknown" }
  // update RecyclerView adapter here
}
D
db.collection("users").addSnapshotListener { snapshots, e -&gt;
  if (e != null) return@addSnapshotListener
  val userList = mutableListOf&lt;String&gt;()
  for (doc in snapshots!!) {
    userList.add(doc.getString("email") ?: "Unknown")
  }
  // update RecyclerView adapter here
}
Attempts:
2 left
💡 Hint

Remember that addSnapshotListener provides real-time updates and you must check for errors before processing data.

🧠 Conceptual
intermediate
1:30remaining
Firestore Document Write Behavior

What happens if you call set() on a Firestore document that already exists without specifying SetOptions.merge()?

AThe write operation is ignored and the document remains unchanged.
BThe new data is merged with the existing document fields automatically.
CFirestore throws a runtime exception because the document exists.
DThe existing document is completely overwritten with the new data.
Attempts:
2 left
💡 Hint

Think about whether set() replaces or merges data by default.

lifecycle
advanced
2:00remaining
Firestore Listener Memory Leak

You added a Firestore addSnapshotListener in your Activity's onCreate() method. What is the best practice to avoid memory leaks related to this listener?

ARemove the listener in the Activity's <code>onDestroy()</code> method by calling <code>remove()</code> on the listener registration.
BNo action needed; Firestore listeners automatically stop when the Activity is destroyed.
CCall <code>remove()</code> on the listener registration in the Activity's <code>onPause()</code> method only.
DSet the listener variable to null in <code>onStop()</code> to release resources.
Attempts:
2 left
💡 Hint

Think about how to properly clean up listeners to prevent leaks.

📝 Syntax
advanced
1:30remaining
Correct Firestore Query Syntax

Which of the following Kotlin Firestore queries correctly retrieves documents from the orders collection where the status field equals "shipped" and orders the results by date descending?

Adb.collection("orders").orderBy("date", Query.Direction.DESCENDING).whereEqualTo("status", "shipped").get()
Bdb.collection("orders").whereEqualTo("status", "shipped").orderBy("date", Query.Direction.DESCENDING).get()
Cdb.collection("orders").whereEqualTo("status", "shipped").orderBy("date", "DESC").get()
Ddb.collection("orders").where("status" == "shipped").orderBy("date", Query.Direction.DESCENDING).get()
Attempts:
2 left
💡 Hint

Check the order of method calls and parameter types for orderBy.

🔧 Debug
expert
2:30remaining
Firestore Security Rules Blocking Access

Your Android app tries to read documents from Firestore but always gets a permission denied error. Your security rules are:

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read: if request.auth.uid == userId;
    }
  }
}

Your app calls db.collection("users").get() to read all users. Why does this fail?

AThe rules syntax is invalid and Firestore rejects all reads.
BThe app is not authenticated, so all reads are denied by default.
CThe rules only allow reading documents where the document ID matches the authenticated user ID, so reading the whole collection is denied.
DThe app must use <code>getDocument()</code> instead of <code>get()</code> to read documents.
Attempts:
2 left
💡 Hint

Consider how the rules restrict access by document ID and user ID.