medmjs
medmjs

Reputation: 116

firebase Storage return null

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

Answers (1)

medmjs
medmjs

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

Related Questions