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

Android Kotlin对接Firebase时RecyclerView用户列表不显示问题

问题排查结果

两处代码错误直接导致了你描述的异常现象:

  • Firebase数据解析逻辑写错
    你在监听users节点数据的回调里,循环遍历子节点时,错误地使用了父节点snapshot做数据解析,没有使用当前循环到的子节点postSnapshot。这意味着你每次拿到的currentUser都是整个users根节点转换出的无效对象,name字段为null,自然不会在TextView上显示用户名。
    错误代码位置:
    for (postSnapshot in snapshot.children){
        // 错误:用了外层的snapshot,不是当前遍历的postSnapshot
        val currentUser = snapshot.getValue(User::class.java)
        userList.add(currentUser!!)
    }
    
    修正写法:
    for (postSnapshot in snapshot.children){
        val currentUser = postSnapshot.getValue(User::class.java)
        // 建议加空判断避免脏数据导致崩溃
        currentUser?.let { userList.add(it) }
    }
    
  • 列表项布局高度配置错误
    你的列表项布局user_layout.xml根布局高度设置为了match_parent,会导致单个列表项直接占满整个RecyclerView的视口高度。结合上面的解析错误,第一个列表项的TextView因为name为null不显示内容,只有下方的分割线可见,剩下的列表项全部被挤到屏幕外,就出现了你看到的“只有一条分割线、页面可滚动但看不到用户数据”的现象。
    修正布局配置,把根布局高度改为wrap_content:
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <!-- 其余内部布局代码保持不变 -->
    </RelativeLayout>
    
额外注意点
  • onCancelled回调里不要留TODO("Not yet implemented"),数据库权限不足、网络异常时会直接触发崩溃,至少要加错误日志打印,或者给用户弹出对应提示。
  • 尽量不要用!!强制非空,数据库里如果存在格式不符合User类的脏数据,会直接触发空指针崩溃,加空判断过滤异常数据更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:01:09