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

如何将Firebase的getCurrentUser()返回值设置到Button或TextView控件中

Firebase认证数据设置到安卓控件解决方案

现有代码错误修正

你代码中的两处核心问题:

  • 直接将FirebaseUser对象传入setText():该方法只接收字符串类型参数,你需要先调用FirebaseUser的对应get方法拿到具体属性,比如邮箱用getEmail()、用户ID用getUid()、显示名用getDisplayName()
  • 注释代码里的loginText.getText(welcomeMessage)逻辑错误:设置TextView文本需要调用setText()方法

修正后的完整代码如下:

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

    logoutBtn =(Button) findViewById(R.id.logoutBtn);
    loginText =(TextView) findViewById(R.id.loggedInTextview);
    firstButton =(Button) findViewById(R.id.firstButton);
    secondButton =(Button) findViewById(R.id.secondButton);

    mAuth = FirebaseAuth.getInstance();
    FirebaseUser user = mAuth.getCurrentUser();
    // 先判空避免空指针,用户未登录时getCurrentUser会返回null
    String welcomeMessage = user != null ? "WELCOME to the app " + user.getEmail() : "请先登录";

    firstButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            loginText.setText("hi " + welcomeMessage);
        }
    });


    secondButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            loginText.setText("I HAVE CHANGED INTO " + secondButton.getText());
            // 先判空再拿属性设置给按钮
            if (mAuth.getCurrentUser() != null) {
                firstButton.setText(mAuth.getCurrentUser().getEmail());
                // 如果要拿其他属性替换对应get方法即可,比如拿UID就写getUid()
                // firstButton.setText(mAuth.getCurrentUser().getUid());
            } else {
                firstButton.setText("未登录");
            }
        }
    });
}

从SignInWithEmailAndPassword方法获取用户邮箱

该方法是异步任务,需要在它的成功回调中获取登录结果,再提取用户邮箱,示例代码如下:

mAuth.signInWithEmailAndPassword(输入的邮箱, 输入的密码)
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
                // 登录成功,从返回结果中获取用户信息
                FirebaseUser signInUser = task.getResult().getUser();
                if (signInUser != null) {
                    String userEmail = signInUser.getEmail();
                    // 直接将邮箱设置到对应控件即可
                    loginText.setText("登录成功,欢迎:" + userEmail);
                }
            } else {
                // 登录失败逻辑处理
                loginText.setText("登录失败:" + task.getException().getMessage());
            }
        }
    });

注意事项

  • 所有获取FirebaseUser对象的操作都要做非空判断,避免空指针崩溃
  • 邮箱密码登录的用户默认没有显示名,调用getDisplayName()会返回空,需要手动调用更新用户资料接口设置
  • 所有用户属性返回的都是String类型,可以直接传给setText()方法,不需要额外调用toString()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:15:01