如何为具有特定子子值的子项检索 Firebase DatabaseReference?

Posted

技术标签:

【中文标题】如何为具有特定子子值的子项检索 Firebase DatabaseReference?【英文标题】:How to retrieve a Firebase DatabaseReference for child with specific children child values? 【发布时间】:2021-12-25 04:46:17 【问题描述】:

我是 android 开发的新手,我最近一直在学习 Firebase,但一直被这个问题困扰。一切正常,我能够使用 FirebaseRecyclerAdapter 成功显示用户 ia RecyclerView,这是我的问题,我想显示他们 requestStatus 设置为“true”,而不是 所有 用户。尝试搜索此内容无济于事。

这是我的 Firebase 实时数据库。

在onCreateView中调用数据库并设置适配器

        val database = FirebaseDatabase.getInstance().getReference().child("users")

    val clientsRecycler = binding.clientsRecycler

    val options: FirebaseRecyclerOptions<User> = FirebaseRecyclerOptions.Builder<User>()
        .setQuery(database, User::class.java)
        .build()

    adapter = Adapter(options)
    clientsRecycler.adapter = adapter

我的适配器类

class Adapter(options: FirebaseRecyclerOptions<User>) :
FirebaseRecyclerAdapter<User, Adapter.ClientsViewHolder>(options) 

class ClientsViewHolder(private val binding: ClientItemBinding) : RecyclerView.ViewHolder(binding.root) 
    val name = binding.clientName
    val phone = binding.clientPhone
    val location = binding.clientLocation


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ClientsViewHolder 
    return ClientsViewHolder(ClientItemBinding
        .inflate(LayoutInflater.from(parent.context), parent, false))


override fun onBindViewHolder(holder: ClientsViewHolder, position: Int, model: User) 
    holder.name.text = model.name
    holder.phone.text = model.phone
    holder.location.text = model.location

如何只显示 John(他的 requestStatus 设置为 true)而不显示 Robert?

我猜该解决方案与 FirebaseDatabase.getInstance().getReference().child("users") 有关,但我不确定如何告诉 Firebase 我只希望用户具有“true” " 请求状态

【问题讨论】:

【参考方案1】:

找到了解决办法。

改变

    val database = FirebaseDatabase.getInstance().getReference().child("users")

        var filterQuery = FirebaseDatabase.getInstance().getReference().child("users").orderByChild("requestStatus").equalTo("true")

        val options: FirebaseRecyclerOptions<User> = FirebaseRecyclerOptions.Builder<User>()
        .setQuery(database, User::class.java)
        .build()

     val options: FirebaseRecyclerOptions<User> = FirebaseRecyclerOptions.Builder<User>()
        .setQuery(filterQuery, User::class.java)
        .build()

基本上不使用 DatabaseReference,只需创建一个查询,然后将其传递给 setQuery()

【讨论】:

以上是关于如何为具有特定子子值的子项检索 Firebase DatabaseReference?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 LINQ 在 asp.net mvc 中获取具有特定子值的所有父母? [复制]

firebase 查询如何从子项中检索两个特定值

带有子值的 Firebase 多路径原子更新?

从 Firebase 仅检索当前用户的子值

检查firebase子项是不是具有特定值[重复]

如何使用 Cloud Functions for Firebase 获取子值的键?