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

Posted

技术标签:

【中文标题】如何从所有用户 ID (UID) 中获取特定值并保存在 RecyclerView Firebase UI【英文标题】:How to get specific values from all UserID (UID) and save in RecyclerViewFirebaseUI 【发布时间】:2021-04-10 02:22:21 【问题描述】:

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

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

下面是我的 getter/setter BusinessListData 类,用作接收值并将它们发送到 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 实时数据库中的广告树下获取特定值

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

【问题讨论】:

请编辑您的问题并将您的数据库结构添加为 JSON 文件或至少是屏幕截图,而不是描述您的数据库的外观。 【参考方案1】:

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

要显示User 节点的子节点,请传入对那个 节点的引用:

mDatabase = FirebaseDatabase.getInstance().reference

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

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

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

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

【讨论】:

“它仍然返回空值”是什么意思?你能在代码中显示null 的值,而不是描述它吗?

以上是关于如何从所有用户 ID (UID) 中获取特定值并保存在 RecyclerView Firebase UI的主要内容,如果未能解决你的问题,请参考以下文章

如何每次从 Firebase 数据库中获取随机 UId?

如何从 Cloud Firestore 中获取数据,其中 user.uid 等于 Flutter 中的文档 ID?

如何从 django 中的用户模型中获取 id

从所有子节点的子 id firebase 获取数据

使用用户 ID 从 Firebase 获取数据

从查询中检索特定键值并在查询中获取它们对的计数