简体   繁体   English

firebase 存储返回 null

[英]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 1-我需要从 realtime_firebase 获取帖子 2-每个帖子都有一个 user_id

then I need to get user Image from Storage_firebase by userId然后我需要通过 userId 从 Storage_firebase 获取用户图像

the problem is return null for image问题是为图像返回 null

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
} 

I'm solving the problem but not understand why -using MutableStateFlow to return value我正在解决问题,但不明白为什么 - 使用 MutableStateFlow 来返回值

 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
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM