Android 从Firebase身份验证获取更新的用户
我目前在Firebase工作。目前我正在使用Android 从Firebase身份验证获取更新的用户,android,firebase,firebase-authentication,Android,Firebase,Firebase Authentication,我目前在Firebase工作。目前我正在使用com.google.firebase:firebase auth:10.0.1 创建一个用户,登录就像一个符咒 现在,我想为用户添加一个选项,用户可以在其中更改其displayName和profileImage 在活动A中,我通过单击按钮调用此方法: public void updateFirebaseUser(String newDisplayName, Uri newPhotoUri) { final FirebaseAuth
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();
}
});
}
此外,重新启动应用程序在这里也没有帮助。但是,如果我注销并再次登录,我的用户数据就会更新
我认为这与Firebase内部缓存有关。这就是为什么我添加了这一行auth.getCurrentUser().reload()代码>在展示祝酒词后
是否有可能强制Firebase更新请求?我在文件里什么也没找到
提前谢谢 我建议您在firebaseDatabase
中将每个用户的凭据分别保存为节点
,并将用户名和配置文件图像保存在那里,如果设置了适当的侦听器,该图像将在数据库中的数据更改后立即更新视图。
i、 e
芜湖!我找到了一个解决方案:
当我确实需要用户对象时,我正在重新加载它,请求成功后,我正在更新我的视图
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());
}
});
}
private void filluserview(导航视图导航视图){
最终视图headerView=navigationView.getHeaderView(0);
final FirebaseAuth auth=FirebaseAuth.getInstance();
auth.getCurrentUser()
.reload()
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公开作废(作废避免){
FirebaseUser=auth.getCurrentUser();
ImageView-avatarVIew=(ImageView)headerView.findViewById(R.id.img_-avatar);
load(user.getPhotoUrl())
.进入(阿凡达视图);
TextView用户名=(TextView)headerView.findViewById(R.id.txt\u名称);
userName.setText(user.getDisplayName());
}
});
}
我也考虑过为此使用FirebaseDatabase。但基本上我想用“UserProfileChangeRequest”试试,希望你能找到解决方案:)如果它仍然导致问题,试着直接使用ChildEventListeners
谢谢!目前,我在上面发布的简单解决方案对我来说还不错。。。谢谢你的支持!
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());
}
});
}