【问题标题】:firebase Storage return nullfirebase 存储返回 null
【发布时间】:2022-01-16 20:28:26
【问题描述】:

真的,我不确定是否可以解释问题

1-我需要从 realtime_firebase 获取帖子 2-每个帖子都有一个 user_id

然后我需要通过 userId 从 Storage_firebase 获取用户图像

问题是图像返回 null

代码

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
} 

【问题讨论】:

  • 所以你说firebaseStorage 对象为空?你初始化了吗?如果是,请告诉我们你是在哪里做的。
  • 在这种情况下,firebaseStorage 不为空,对吧?这是关于 imageUri 为空,对吗?
  • 我正在使用匕首刀柄进行初始化 提供单例乐趣 getStorage(): FirebaseStorage = FirebaseStorage.getInstance() 并在上传时运行 图片问题无法访问 addOnSuccessListener
  • yes firebaseStorage is Not null put 问题无法访问 addOnSuccessListener

标签: android firebase kotlin firebase-realtime-database firebase-storage


【解决方案1】:

我正在解决问题,但不明白为什么 - 使用 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
    }

【讨论】:

猜你喜欢
  • 2018-10-02
  • 2021-01-10
  • 2021-05-19
  • 1970-01-01
  • 2020-11-28
  • 2014-08-04
  • 2019-02-05
  • 2019-07-04
  • 1970-01-01
相关资源
最近更新 更多