Firebase 数据库循环查询用户

鲁斯兰·列申科

例如,我有一个问题列表。每个问题都有所有者 uid。通过这个uid,我应该找到需要的用户并显示他的名字和照片。我使用帮助架构组件 ViewModel 来做到这一点:

 issues.forEach {
        IssueRepository().getIssueOwner(it.owner).observe(this, Observer {

        })
    }

getIssueOwner 方法:

fun getIssueOwner(uid: String): MutableLiveData<UserEntity> {
    val user: MutableLiveData<UserEntity> = MutableLiveData()
    val usersReference = FirebaseDatabase.getInstance().reference.child("users")
    val query = usersReference.orderByKey().equalTo(uid).limitToFirst(1)
    query.addValueEventListener(object : ValueEventListener {
        override fun onCancelled(p0: DatabaseError?) {
        }

        override fun onDataChange(dataSnapshot: DataSnapshot?) {
            if (dataSnapshot == null) {
                return
            }
            dataSnapshot.children.forEach {
                val name = it.child("displayName").value
                user.postValue(UserEntity(name))
            }

        }
    })
    return user
}

但我确信这种方法是不正确的。你能给我一个建议,我应该如何构建我的应用程序的架构?

弗兰克·范·普费伦

这:

val query = usersReference.orderByKey().equalTo(uid).limitToFirst(1)

给出与这个更简单的完全相同的结果:

val userReference = usersReference.child(uid)

两者之间的唯一区别是第一个片段为您提供一个包含一个项目列表的快照,而第二个片段为您提供一个仅包含该项目的快照。

val userReference = usersReference.child(uid)
userReference.addValueEventListener(object : ValueEventListener {
    override fun onCancelled(error: DatabaseError?) {
        throw error.toException() // don't ignore errors
    }

    override fun onDataChange(dataSnapshot: DataSnapshot?) {
        if (dataSnapshot.exists()
            val name = dataSnapshot.child("displayName").value
            user.postValue(UserEntity(name))
        }
    }
})

请注意,您仍然无法从该getIssueOwner方法返回用户这是因为数据是从 Firebase 异步加载的,并且在您的return语句执行时,onDataChange还没有被调用。

我建议您阅读有关该主题的一些先前问题,以了解有关处理 Firebase(以及大多数现代网络)的异步性质的更多信息:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

快速查询firebase数据库的中间部分

来自分类Dev

如何从Firebase数据库查询用户的详细信息?

来自分类Dev

Swift和Firebase查询数据库

来自分类Dev

Firebase:将用户UID链接到数据库

来自分类Dev

Firebase数据库-按ID列表查询

来自分类Dev

在Firebase数据库中存储用户的正确方法

来自分类Dev

Firebase数据库:如何保存每个用户的好友列表?

来自分类Dev

Firebase数据库规则-允许未经身份验证的用户仅过滤查询

来自分类Dev

带查询的Firebase实时数据库定价

来自分类Dev

Firebase在while循环中推送到数据库

来自分类Dev

无法在Firebase数据库iOS中保存用户

来自分类Dev

Firebase数据库查询显示数据库信息,而不是数据

来自分类Dev

用于查询的Firebase Realtime数据库安全规则

来自分类Dev

Firebase数据库:无法循环通过.push()的数组

来自分类Dev

Firebase数据库规则:用户权限

来自分类Dev

Android Firebase数据库查询选择条件

来自分类Dev

Firebase 数据库查询在离线时不返回

来自分类Dev

android firebase 数据库保存当前用户的数据

来自分类Dev

Firebase 查询数据库为用户名返回 null

来自分类Dev

使用 Firebase 数据库规则的用户 RemoteConfig

来自分类Dev

查询 Firebase 数据库但未获取数据或错误

来自分类Dev

从 firebase 数据库中获取用户的密钥

来自分类Dev

限制一组用户访问 firebase 数据库

来自分类Dev

如何停止 Firebase 数据库无限循环

来自分类Dev

特定用户的 Firebase 数据库规则

来自分类Dev

如何循环从 Firebase 数据库获取数据?

来自分类Dev

迭代 firebase 数据库中的用户

来自分类Dev

如何查询我的 Firebase 数据库?

来自分类Dev

新用户的 Firebase 数据库安全

Related 相关文章

热门标签

归档