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

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?我在文档中找不到任何内容.

提前致谢!

dud*_*dum 7

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)