首页 > 解决方案 > 如何为具有特定子子值的子项检索 Firebase DatabaseReference?

问题描述

我是 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” requestStatus 的用户

标签: androidfirebasefirebase-realtime-databaseandroid-recyclerview

解决方案


找到了解决方案。

改变

    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()


推荐阅读