You need to enable JavaScript to run this app. Firebase Realtime Database数据未在TextView中显示的问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Realtime Database数据未在TextView中显示的问题求助

问题核心原因定位

你的代码存在三处会导致数据无法正常展示的明确问题,按影响优先级排序如下:

  • 冗余无效的循环遍历逻辑
    你初始化的DatabaseReference已经直接指向state节点,onDataChange回调里拿到的dataSnapshot本身就对应整个state的快照,根本不需要额外套for (DataSnapshot snapshot : dataSnapshot.getChildren())循环。更关键的是,循环内部你仍然从外层的dataSnapshot取值,没有使用循环生成的snapshot变量,这层循环不仅没有实际作用,还会导致取值代码被重复执行2次(遍历两个子节点各跑一遍赋值逻辑),增加不必要的性能开销。
  • TextView setText 方法API误用(核心崩溃原因)
    Android的TextView有两个重载的setText方法:一个接收字符串类型参数,另一个接收int类型参数——后者的参数是要求传入res/values目录下的字符串资源ID,而非业务数据的整数值。你直接把从数据库拿到的weight整型值(比如2500)传给setText,系统会尝试查找对应ID的资源,由于根本不存在该ID的资源,会直接抛出Resources$NotFoundException异常,导致页面赋值逻辑中断,两个TextView都无法正常显示内容。
  • 错误回调未做日志打印,问题排查无感知
    你的onCancelled方法完全为空,当遇到Firebase数据库权限不足、网络同步失败等问题时,没有任何日志输出,会导致问题出现时完全定位不到根因。
修正后的可正常运行的代码
public class SubActivity extends AppCompatActivity {
    TextView tvWeight;
    TextView tvOpen_close;
    private static final String TAG = "SubActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sub);

        tvWeight = findViewById(R.id.textView_weight);
        tvOpen_close = findViewById(R.id.textView_open_close);

        final DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("state");

        ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                // 直接从state节点快照取值,删除冗余循环
                String openState = dataSnapshot.child("open_close").getValue(String.class);
                Integer weight = dataSnapshot.child("weight").getValue(Integer.class);

                // 空值判断避免空指针,转成字符串后赋值
                tvOpen_close.setText(openState == null ? "状态未知" : openState);
                tvWeight.setText(weight == null ? "--" : String.valueOf(weight));
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                // 打印错误日志,方便排查权限、网络等问题
                Log.e(TAG, "Firebase数据读取失败: " + databaseError.getMessage());
            }
        });
    }
}
后续排查注意点
  • 确认Firebase Realtime Database的规则没有限制读取权限,对应访问身份要有目标节点的读权限
  • 确认项目的google-services.json配置正确,数据库的实例地址和配置文件里的地址完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 03:24:04