Android Studio中如何从Firebase数据库Usuarios节点获取用户名?
从Firebase数据库获取用户名并赋值给TextView的解决方案
我来帮你搞定这个需求!要实现从Firebase的Usuarios节点获取用户名并显示到txtName上,核心是结合Firebase Auth获取当前登录用户的标识,再监听对应数据库节点的数据变化。下面是修改后的完整代码,我会加上详细注释:
public class HomeFragment extends Fragment { private FirebaseAuth.AuthStateListener mAuthListener; private FirebaseAuth mAuth = FirebaseAuth.getInstance(); private Button btnLogOut; private int CAMERA_REQUEST_CODE = 0; // 改成成员变量,避免局部变量覆盖导致后续无法访问 private TextView textName; private DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference(); FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference myRef = database.getReference("Usuarios"); // 声明监听器变量,方便后续移除避免内存泄漏 private ValueEventListener userDataListener; public HomeFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_home, container, false); // 初始化TextView,直接赋值给成员变量 textName = view.findViewById(R.id.txtName); // 获取当前登录用户 FirebaseUser currentUser = mAuth.getCurrentUser(); if (currentUser != null) { // 用用户UID定位到Usuarios下的对应节点 String userId = currentUser.getUid(); // 监听用户数据变化 userDataListener = myRef.child(userId).addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { // 从数据库快照中取用户名,这里假设字段名为"nombre",请根据你的实际结构修改 String userName = snapshot.child("nombre").getValue(String.class); // 非空判断后设置文本 if (userName != null) { textName.setText(userName); } else { textName.setText("匿名用户"); } } @Override public void onCancelled(@NonNull DatabaseError error) { // 处理读取失败的情况 Log.e("HomeFragment", "读取用户数据失败: " + error.getMessage()); textName.setText("加载失败"); } }); } else { // 用户未登录时的提示 textName.setText("请先登录"); } return view; } @Override public void onPause() { super.onPause(); // 移除监听器,防止内存泄漏 if (userDataListener != null) { myRef.removeEventListener(userDataListener); } } }
关键注意事项:
- 我把
textName调整为成员变量,原来你在onCreateView里声明的局部变量会导致监听器无法访问到它,这是常见的小坑。 - 假设你的Firebase数据库结构是这样的(如果不是,请修改代码中的字段名或节点路径):
Usuarios |--- 用户UID |--- nombre: "张三" |--- 其他用户字段... - 必须在
onPause或onDestroyView中移除数据库监听器,避免内存泄漏影响应用性能。 - 加入了空值判断和错误处理,防止因未登录、字段不存在或网络问题导致崩溃。
内容的提问来源于stack exchange,提问作者BK201
相关产品推荐
相关产品推荐

