【问题标题】:How to get specific values from all UserID (UID) and save in RecyclerViewFirebaseUI如何从所有用户 ID (UID) 中获取特定值并保存在 RecyclerView Firebase UI
【发布时间】: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 文件或至少是屏幕截图,而不是描述您的数据库的外观。

标签: android firebase-realtime-database android-recyclerview firebaseui kotlin-android-extensions


【解决方案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 的值,而不是描述它吗?
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 2018-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 1970-01-01
相关资源
最近更新 更多