dud*_*dum 2 android firebase firebase-authentication
我目前正在使用Firebase.目前我正在使用com.google.firebase:firebase-auth:10.0.1
创建用户,登录就像魅力一样.
现在我想为用户添加一个选项,用户可以在其中更改他/她的displayName和profileImage
在Activity AI中,通过单击按钮调用此方法:
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();
}
});
}
Run Code Online (Sandbox Code Playgroud)
一切似乎都有效,因为我在屏幕上收到Toast,显示 "profile update success = true"
稍后在应用程序中我想显示用户信息,我fillUserViews()在活动B中调用.但仍显示我的旧信息.
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());
}
Run Code Online (Sandbox Code Playgroud)
此外,重新启动应用程序也无济于事.但是如果我退出并再次重新登录,我的用户数据就会更新.
我认为这与Firebase内部缓存有关.这就是为什么我auth.getCurrentUser().reload();在展示吐司后添加了这一行.
是否有可能强制更新请求到Firebase?我在文档中找不到任何内容.
提前致谢!
wuhuuuu!我找到了解决方案:
我正在重新加载用户对象,当我真正需要它时,请求成功后我正在更新我的观点!
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());
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3126 次 |
| 最近记录: |