I have a simple function that retrieves a value from Firebase Firestore. I want to return the value. How do I make the function wait until the value is retrieved, rather than immediately returning an empty value?
Please Kotlin only.
fun fireStoreGetter(keyVal: String): String {
Log.d("FIRESTORE_OP", "fGet running with keyVal: " + keyVal)
//logs: FIRESTORE_OP: fGet running with keyVal: exampleString
var userId :String = ""
var mFirebaseDatabaseInstances = FirebaseFirestore.getInstance()
val user = FirebaseAuth.getInstance().currentUser
if (user != null) {
userId = user.uid
//Log.e(TAG, "User data is null")
} else {
Log.d("FIRESTORE_OP", "MUST AUTHENTICATE TO ACCESS FIRESTORE")
}
Log.d("FIRESTORE_OP", "USER IN WITH UID: " + userId)
//logs FIRESTORE_OP: USER IN WITH UID: DGGiDibnldhP5z6iUyf_GQ
val docRef2 = mFirebaseDatabaseInstances.collection("users").document(userId).collection("dBase").document("exampleDoc")
docRef2.get()
.addOnSuccessListener { document ->
//for (document in result) {
if (document != null) {
//docVal is instantiated in main thread
docVal = document.getString(keyVal).toString()//String(keyVal)
Log.d("FIRESTORE_OP", "DOCVAL SET: " + docVal)
//logs: FIRESTORE_OP: DOCVAL SET: (correct value from firestore)
}
}
Log.d("FIRESTORE_OP", "RETURNING fGet: " + "VALUE: " + docVal)
//logs: FIRESTORE_OP: RETURNING fGet: VALUE:
return docVal
//returns empty
}