如何将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
相关产品推荐
相关产品推荐

