Android 从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

我目前在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();
               }
            });
   }
此外,重新启动应用程序在这里也没有帮助。但是,如果我注销并再次登录,我的用户数据就会更新

我认为这与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());
               }
            });
   }