如何在Firebase中获取子节点user ID匹配当前用户的上层节点ID?
实现方案
要获取匹配到的子节点对应的上层节点ID,直接调用遍历过程中DataSnapshot实例的key属性即可,该属性返回的就是当前节点的节点名称,也就是你需要的上层节点ID。
修改后的代码
fun loadOwnOffer() { val currentUid = firebaseAuth.currentUser?.uid ?: return // 提前判空,避免后续重复空判断 databaseReference.addValueEventListener(object : ValueEventListener { override fun onDataChange(snapshot: DataSnapshot) { for (data in snapshot.children) { val model = data.getValue(OffersModelClass::class.java) val userID: String = model?.userID.toString() if (userID == currentUid) { // 此处获取上层节点ID val parentNodeId = data.key Log.d("获取到的上层节点ID", parentNodeId ?: "节点ID为空") Log.d("匹配到的用户ID", userID) } } } override fun onCancelled(error: DatabaseError) { // 异常处理逻辑,方便排查问题 Log.w("loadOwnOffer", "加载数据失败", error.toException()) } }) }
补充说明
- 提前对当前登录用户的UID做判空处理,如果用户未登录直接跳出方法,避免后续无效的逻辑执行
- 新增了
onCancelled的异常处理逻辑,避免运行时崩溃,也方便排查数据库请求失败的问题 - 如果你只需要单次拉取数据而不需要实时监听数据变化,可以把
addValueEventListener替换为addListenerForSingleValueEvent,减少不必要的性能消耗

内容的提问来源于stack exchange,提问作者Mohammad Mawed
相关产品推荐
相关产品推荐

