Firebase实时数据库数据无法显示在TextView的问题排查求助
问题解决:Firebase实时数据库无法读取用户数据填充TextView
核心错误分析
你的代码中重复嵌套了用户ID节点:
referinta = FirebaseDatabase.getInstance("https://rezervarebileteveniment-default-rtdb.europe-west1.firebasedatabase.app") .getReference("Users").child(userID); // 此处已定位到Users/userID节点,后续又额外调用child(userID),导致路径错误 referinta.child(userID).addListenerForSingleValueEvent(...)
错误路径会变成Users/userID/userID,但你的数据库结构是Users节点下直接存放用户ID对应的用户数据,因此无法找到目标数据,导致TextView无法被填充。
修正后的关键代码
修改ProfilUser类中的数据库监听逻辑,移除多余的child(userID):
// 直接对已定位到用户节点的referinta添加监听 referinta.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { User profilUser = snapshot.getValue(User.class); if(profilUser != null){ String nume = profilUser.nume; String prenume = profilUser.prenume; String email = profilUser.email; String varsta = profilUser.varsta; bunVenitTextView.setText("Buna ziua, "+nume + " "+prenume +"!"); numeTextView.setText(nume); prenumeTextView.setText(prenume); emailTextView.setText(email); varstaTextView.setText(varsta); } else { // 增加空数据提示,辅助调试 Toast.makeText(ProfilUser.this,"未找到用户数据", Toast.LENGTH_LONG).show(); } } @Override public void onCancelled(@NonNull DatabaseError error) { // 显示具体错误信息,便于排查 Toast.makeText(ProfilUser.this,"加载失败:"+error.getMessage(), Toast.LENGTH_LONG).show(); } });
额外排查点
- 数据库规则配置:确保规则允许认证用户读取自身数据,示例规则:
{ "rules": { "Users": { "$uid": { ".read": "$uid === auth.uid", ".write": "$uid === auth.uid" } } } }
- 字段一致性验证:确认数据库字段名(
nume、prenume、varsta、email)与User实体类的公共字段名完全一致(大小写敏感)。 - 登录状态校验:添加用户登录状态判断,避免空指针异常:
user = FirebaseAuth.getInstance().getCurrentUser(); if(user == null) { startActivity(new Intent(ProfilUser.this, MainActivity.class)); finish(); return; } userID = user.getUid();
内容的提问来源于stack exchange,提问作者Alexandru Octavian
相关产品推荐
相关产品推荐

