如何从所有用户 ID (UID) 获取特定值并保存在 RecyclerView Firebase UI 中

How to get specific values from all UserID (UID) and save in RecyclerViewFirebaseUI

如何使用以下结构从我的数据库中获取所有用户的 UID,并将其保存在我的 FirebaseRecyclerviewUI 中?我已经尝试了几个小时,但我的回收站视图仍然显示为空。

-User
 |
  -uid
   |
    -advert
     |
      -bus_name
      -category
      -purl
      -id

下面是我的 getter/setter BusinessListData class 用作接收值并将它们发送到 recyclerview

的模型
class BusinessListData {

    var id: String = ""

    var propixurl: String = ""

    var business_name: String = ""
    var category: String = ""

    constructor(){

    }

    constructor(id: String, propixurl: String, business_name: String, category: String) {
        this.id = id

        this.propixurl = propixurl
        this.business_name = business_name
        this.category = category
    }

    fun getID(): String{
        return id
    }
    fun getUrl(): String{
        return propixurl
    }
    fun getBusName(): String{
        return business_name
    }

    fun getCate(): String{
        return category
    }

    fun setID(id: String){
        this.id = id
    }
    fun setUrl(propixurl: String){
        this.propixurl = propixurl
    }
    fun setBusName(business_name: String){
        this.business_name = business_name
    }
    fun setCate(category: String){
        this.category = category
    }
}

我的 FirebaseRecyclerViewUI 详细信息如下。 mDatabase 是对数据库的引用,我尝试根据我的 Log.v 值获取成功的数据快照。问题是我无法在我的 Firebase 实时数据库中的 Advert 树下获取特定值

mDatabase = FirebaseDatabase.getInstance().reference

val options: FirebaseRecyclerOptions<BusinessListData> = FirebaseRecyclerOptions.Builder<BusinessListData>()
    .setQuery(mDatabase, object: SnapshotParser<BusinessListData> {

        override fun parseSnapshot(snapshot: DataSnapshot): BusinessListData {
                Log.v("snapshotfire", snapshot.toString()) //returns all snapshot values
                Log.v("snapshotfire", snapshot.child("purl").toString()) // this returns null
                Log.v("snapshotfire", snapshot.child("bus_name").getValue().toString()) //this also returns null

            return BusinessListData(snapshot.child("id").getValue().toString(),
                snapshot.child("purl").getValue().toString(),
                snapshot.child("bus_name").getValue().toString(),
                snapshot.child("category").getValue().toString()
            )
        }

    })
    .build()

当您设置对 FirebaseUI 适配器的特定查询或数据库引用时,它将显示该 reference/query 的每个子节点。由于您传入数据库的根,因此将为根的每个子节点调用您的parseSnapshot,这似乎不是您想要的。

要显示 User 节点的子节点,传入对 that 节点的引用:

mDatabase = FirebaseDatabase.getInstance().reference

val options: FirebaseRecyclerOptions<BusinessListData> = FirebaseRecyclerOptions.Builder<BusinessListData>()
    .setQuery(mDatabase.child("User"), object: SnapshotParser<BusinessListData> {
        ...

现在您的 parseSnapshot 将被调用 User 的每个子节点,您可以从该快照中获取必要的 keys/values。

例如,要获取 UID,您可以读取快照的密钥或其 advert/uid 属性:

override fun parseSnapshot(snapshot: DataSnapshot): BusinessListData {
    Log.v("snapshotfire", snapshot.key)
    Log.v("snapshotfire", snapshot.child("advert/id").getValue())
)