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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:29:27