如何为具有特定子子值的子项检索 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?的主要内容,如果未能解决你的问题,请参考以下文章