无法更新用户显示名称直到我注销并再次登录firebase

Posted

技术标签:

【中文标题】无法更新用户显示名称直到我注销并再次登录firebase【英文标题】:Can not update user Display name utill I log out and login again in firebase 【发布时间】:2018-10-02 18:13:12 【问题描述】:

我的导航标题中有一个文本视图,我想在用户更新其显示名称时对其进行更新。配置文件成功更新,但导航标题中的文本视图没有更新,我注销并再次登录。

这是oncreate方法

firebaseAuth = FirebaseAuth.getInstance();
user = firebaseAuth.getCurrentUser();       
nvDrawer = (NavigationView) findViewById(R.id.nvView);

// Setup drawer view
setupDrawerContent(nvDrawer);

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestIdToken(getString(R.string.default_web_client_id))
        .requestEmail()
        .build();

mGoogleSignInClient = new GoogleApiClient.Builder(this)
        .enableAutoManage(this , new GoogleApiClient.OnConnectionFailedListener() 
            @Override
            public void onConnectionFailed(@NonNull ConnectionResult connectionResult) 

            
         /* OnConnectionFailedListener */)
        .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
        .build();
headerLayout = nvDrawer.inflateHeaderView(R.layout.nav_header);
name =  headerLayout.findViewById(R.id.dp_name);
user_email= headerLayout.findViewById(R.id.email);
FirebaseAuth.AuthStateListener mAuthListener;

if (user!=null) 
    user_email.setText(user.getEmail());
    name.setText(user.getDisplayName());
    Log.i("name", "Dp name is" + user.getDisplayName());


FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseAuth.AuthStateListener authListener = new FirebaseAuth.AuthStateListener() 
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) 
        FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
        if (firebaseUser != null) 
            name.setText(user.getDisplayName());
        
    
;

这就是我更新个人资料的方式。

final String user_name = editText.getText().toString();

if (TextUtils.isEmpty(user_name)) 
    editText.setError("This field is required");
    editText.requestFocus();
    Toast.makeText(getApplicationContext(), "Empty", Toast.LENGTH_LONG).show();
 else 
    UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
            .setDisplayName(user_name)
            .build();

    user.updateProfile(profileUpdates).addOnCompleteListener(new OnCompleteListener<Void>() 
        @Override
        public void onComplete(@NonNull Task<Void> task) 
            if (task.isSuccessful()) 
                name.setText(user.getDisplayName());

                // Here task is successful but log does not return updated name
                Log.i("Updated", "Dp name is" +user.getDisplayName());
                Toast.makeText(getApplicationContext(), "Profile updated", Toast.LENGTH_LONG).show();
             else Toast.makeText(getApplicationContext(), "Failed", Toast.LENGTH_LONG).show();
        
    );

请查看日志。成功更新配置文件后,我也在日志中获得旧名称。

签入代码。我已经写了评论。

【问题讨论】:

updateProfile() 函数有什么作用?这是AsyncTask吗? 它是firebase提供的一种更新用户基本信息的方法,例如显示名称、图像uri等。 ***.com/questions/49767695/… 看看这个答案 这不是我的问题。在我的情况下,配置文件会更新,但视图和日志只有在我注销并再次登录后才会显示正确。 【参考方案1】:

这只是 firebase 中的一个已知问题。如果您使用的是旧的 firebaseAuth。将您的成绩更新到 11.0.4

【讨论】:

以上是关于无法更新用户显示名称直到我注销并再次登录firebase的主要内容,如果未能解决你的问题,请参考以下文章

注销主表单并显示登录表单

终极会员注销无法使用 WPML

选择按钮后,再次弹出Ionic 3 Alert

开放标识。你如何注销

第二次 Django 注销不起作用

facebook 无法在 ios 应用程序中正确注销。无法切换用户