Android中用Kotlin读取Firebase根节点下所有子节点的指定键值
Android Kotlin读取Firebase指定子节点键值与节点名称
在Firebase数据库的根节点下有一组子节点,希望在Android平台使用Kotlin读取每个子节点中存在的特定键值对(如每个子节点的STATUS值),同时获取对应的子节点名称。
示例中,子节点azd1的STATUS为1,子节点bzi12的STATUS为0。
目前编写的代码返回所有子节点的全部键值,而非目标键值,需要实现所需功能。
原代码:
val listener = object : ValueEventListener { override fun onDataChange(snapshot: DataSnapshot) { Timber.d("Values: ${snapshot.value}") } override fun onCancelled(error: DatabaseError) { Timber.d("Error: ${error.message}") } } databaseRef.addValueEventListener(listener)
解决方案
你需要遍历DataSnapshot的所有子节点,分别获取每个子节点的名称(key)和目标键(STATUS)的值。修改onDataChange方法如下:
val listener = object : ValueEventListener { override fun onDataChange(snapshot: DataSnapshot) { // 遍历根节点下的所有子节点 snapshot.children.forEach { childSnapshot -> // 获取子节点名称(如azd1、bzi12) val nodeName = childSnapshot.key // 获取STATUS字段的值,这里假设是Int类型,可根据实际类型调整 val status = childSnapshot.child("STATUS").getValue(Int::class.java) // 打印或处理获取到的数据 Timber.d("节点名称:$nodeName,STATUS值:$status") } } override fun onCancelled(error: DatabaseError) { Timber.d("读取数据失败:${error.message}") } } databaseRef.addValueEventListener(listener)
关键说明
snapshot.children返回根节点下所有子节点的迭代器,通过forEach逐个处理每个子节点childSnapshot.key直接获取当前子节点的名称childSnapshot.child("STATUS")定位到子节点中的STATUS字段,getValue方法指定类型来获取对应值,若存在部分子节点没有STATUS字段的情况,建议添加空值判断(比如status ?: 默认值)
内容的提问来源于stack exchange,提问作者oyeraghib
相关产品推荐
相关产品推荐

