You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Kotlin数据检索异常:无法获取Publicaciones节点子数据

Firebase Database onDataChange未执行&无数据返回排查与修复

核心问题排查方向

  • 数据库权限配置错误
    Firebase Realtime Database默认安全规则限制未授权用户读写。如果App未完成用户登录,或规则设置为仅允许认证用户访问,会导致读取请求被拒绝,onDataChange不会触发,而onCancelled会被调用(当前代码未处理该回调,无法获取错误信息)。
    临时测试可修改规则为(上线前务必改回严格规则):

    {
      "rules": {
        ".read": true,
        ".write": true
      }
    }
    

    同时在onCancelled中添加日志排查错误:

    override fun onCancelled(error: DatabaseError) {
        Log.e("FirebaseError", "读取失败:${error.message}")
    }
    
  • 节点路径拼写不匹配
    确认Firebase控制台中节点名称为Publicaciones(注意大小写、拼写完全一致),Firebase路径区分大小写,拼写错误会导致读取空节点。

  • Firebase初始化不完整
    检查项目根目录的google-services.json是否正确配置,App启动时是否完成Firebase初始化(通常集成时自动处理,但需确认无配置遗漏)。

代码逻辑修正

你的代码存在两处逻辑错误,即使数据读取成功也无法正确显示:

  1. publicacion.equals(uidRecibido)逻辑错误:Publicacion是自定义对象,uidRecibido是字符串,直接调用equals永远不成立,应比较对象中的UID字段,比如publicacion.uid == uidRecibido。
  2. reverse()和notifyDataSetChanged()放在循环内部:每次循环都反转列表、通知适配器,会导致数据混乱,应在循环结束后统一处理。

修正后的代码:

private fun mostrarFotosSubidas(){
    val publcacionesRef= FirebaseDatabase.getInstance().reference.child("Publicaciones")
    publcacionesRef.addValueEventListener(object : ValueEventListener{
        override fun onDataChange(snapshot: DataSnapshot) {
            listaPublicacion?.clear() ?: return // 避免空指针
            for (childSnapshot in snapshot.children) {
                val publicacion = childSnapshot.getValue(Publicacion::class.java)
                publicacion?.let {
                    // 比较对象中的UID字段,而非整个对象与字符串比较
                    if (it.uid == uidRecibido) {
                        (listaPublicacion as ArrayList<Publicacion>).add(it)
                    }
                }
            }
            // 循环结束后统一处理列表更新
            listaPublicacion.reverse()
            imagenesAdaptador?.notifyDataSetChanged()
        }

        override fun onCancelled(error: DatabaseError) {
            Log.e("FirebaseDebug", "读取Publicaciones失败: ${error.details}, ${error.message}")
        }
    })
}

额外注意事项

  • 确保Publicacion类的字段名和数据库中节点的键名完全匹配(包括大小写),或使用@PropertyName注解映射不一致的字段。
  • 检查listaPublicacion和imagenesAdaptador是否已正确初始化,避免空指针导致后续操作无反应。

内容的提问来源于stack exchange,提问作者Monrac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:40:27