如何从所有用户 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的主要内容,如果未能解决你的问题,请参考以下文章