Reputation: 116
real i'm not sure if can explain the proplem
1-I need to get posts from realtime_firebase 2-every post has a user_id
then I need to get user Image from Storage_firebase by userId
the problem is return null for image
Code
fun getPosts(liveData: MutableLiveData<List<Post>>) {
val databaseRef = firebaseDatabase.getReference("Posts")
var posts: ArrayList<Post> = ArrayList()
databaseRef.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
posts.clear()
for (snapshot in snapshot.children) {
var post = snapshot.getValue(Post::class.java)
post?.image = getUserImage(post?.userId!!)
posts.add(post!!)
}
liveData.value = posts
}
override fun onCancelled(error: DatabaseError) {
}
})
}
private fun getUserImage(user_id: String): String? {
var imageUri = ""
firebaseStorage.reference.child("users").child("profile")
.child(user_id).downloadUrl.addOnSuccessListener {
//problem is not access to this methode
imageUri = it.toString()
}
return imageUri
}
Upvotes: 0
Views: 374
Reputation: 116
I'm solving the problem but not understand why -using MutableStateFlow to return value
databaseRef.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
posts.clear()
for (snapshot in snapshot.children) {
var post = snapshot.getValue(Post::class.java)
GlobalScope.launch {
getUserImage(post?.userId!!).collect {
post?.image = it
}
}
posts.add(post!!)
}
liveData.value = posts
}
override fun onCancelled(error: DatabaseError) {
}
})
}
private fun getUserImage(user_id: String): MutableStateFlow<String> {
var imageUri = MutableStateFlow<String>("")
var imageRef = firebaseStorage.reference.child("users").child("profile")
.child(user_id).downloadUrl.addOnSuccessListener {
GlobalScope.launch {
imageUri.emit(it.toString())
}
}
return imageUri
}
Upvotes: 1