gpt4 book ai didi

android - 从 Firebase 身份验证获取更新的用户

转载 作者:太空狗 更新时间:2023-10-29 15:59:30 26 4
gpt4 key购买 nike

我目前正在使用 Firebase。目前我正在使用 com.google.firebase:firebase-auth:10.0.1

创建用户,登录就像一个魅力。

现在我想为用户添加一个选项,用户可以在其中更改他/她的 displayName 和 profileImage

在 Activity A 中,我通过单击按钮调用此方法:

   public void updateFirebaseUser(String newDisplayName, Uri newPhotoUri) {
final FirebaseAuth auth = FirebaseAuth.getInstance();
final FirebaseUser user = auth.getCurrentUser();
if (user == null || (TextUtils.isEmpty(newDisplayName) && newPhotoUri == null)) {
return;
}
UserProfileChangeRequest.Builder builder = new UserProfileChangeRequest.Builder();

if (!TextUtils.isEmpty(newDisplayName)) {
builder.setDisplayName(newDisplayName);
}
if (newPhotoUri != null) {
builder.setPhotoUri(newPhotoUri);
}
UserProfileChangeRequest request = builder.build();
user.updateProfile(request)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(context, "profile update success = " + task.isSuccessful(),
Toast.LENGTH_SHORT)
.show();
}
});
}

一切似乎都正常,因为我在屏幕上收到 Toast,显示 "profile update success = true"

稍后在应用程序中我想显示用户信息,我在 Activity B 中调用了 fillUserViews()但我的旧信息仍然显示。

   private void fillUserViews(NavigationView navigationView) {
View headerView = navigationView.getHeaderView(0);
FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();

ImageView avatarVIew = (ImageView) headerView.findViewById(R.id.img_avatar);
picasso.load(user.getPhotoUrl())
.into(avatarVIew);

TextView userName = (TextView) headerView.findViewById(R.id.txt_name);
userName.setText(user.getDisplayName());

TextView userMail = (TextView) headerView.findViewById(R.id.txt_mail);
userMail.setText(user.getEmail());
}

重新启动应用程序也无济于事。但是,如果我注销并再次重新登录,我的用户数据就会更新。

我认为这与 Firebase 内部缓存有关。这就是为什么我在显示 toast 后添加了这一行 auth.getCurrentUser().reload();

是否有可能将更新请求强制发送到 Firebase?我在文档中找不到任何内容。

提前致谢!

最佳答案

呜呜呜!我找到了一个解决方案:

我会在确实需要时重新加载用户对象,在请求成功后我会更新我的 View !

   private void fillUserViews(NavigationView navigationView) {
final View headerView = navigationView.getHeaderView(0);
final FirebaseAuth auth = FirebaseAuth.getInstance();
auth.getCurrentUser()
.reload()
.addOnSuccessListener(new OnSuccessListener<Void>() {

@Override
public void onSuccess(Void aVoid) {
FirebaseUser user = auth.getCurrentUser();

ImageView avatarVIew = (ImageView) headerView.findViewById(R.id.img_avatar);
picasso.load(user.getPhotoUrl())
.into(avatarVIew);
TextView userName = (TextView) headerView.findViewById(R.id.txt_name);
userName.setText(user.getDisplayName());
}
});
}

关于android - 从 Firebase 身份验证获取更新的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41488726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com