【发布时间】:2017-01-05 15:28:10
【问题描述】:
我目前正在使用 Firebase。目前我正在使用com.google.firebase:firebase-auth:10.0.1
创建用户,登录就像一个魅力。
现在我想为用户添加一个选项,用户可以在其中更改他/她的 displayName 和 profileImage
在活动 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?我在文档中一无所获。
提前致谢!
【问题讨论】:
标签: android firebase firebase-authentication