I am calling a function that return an array from my firebase realtime database. Since the function need few seconds to be executed, i need to stop my code until the function return the value. i think i have to user coroutines but it is a little bit confusing
Any suggestion?
fun fetchUserInfo(user: User): ArrayList<String>{
val userId = user.uid
val userLanguageArray = arrayListOf<String>()
val userLanguagesReference = FirebaseDatabase.getInstance().getReference("/languages/$userId/")
userLanguagesReference.addValueEventListener(object: ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
userLanguageArray.clear()
snapshot.children.forEach(){
val a = it.value.toString()
userLanguageArray.add(a)
//Toast.makeText(context,"${userLanguageArray[0]}",Toast.LENGTH_SHORT).show()
}
}
override fun onCancelled(error: DatabaseError) {
}
})
return userLanguageArray
}
allUsersRef.addValueEventListener(object : ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
mMap.clear()
val latLng = LatLng(mlatitude,mlongitude)
val markerOptions = MarkerOptions().position(latLng).title(HomeActivity.newUser?.name)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE))
mMarker = mMap.addMarker(markerOptions)
mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng))
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng,10f))
User_Id_HashMap.clear()
User_distance_HashMap.clear()
snapshot.children.forEach() {
val user = it.getValue(User::class.java)
val userLanguage = fetchUserInfo(user!!)
Log.d("TAG","$userLanguage[0]")
}
}