首页 > 解决方案 > 退出 Firebase AuthUI 时单击两次错误

问题描述

退出 Firebase AuthUI 时单击两次错误:

当我单击“退出”时,它会显示“您已登录”。

当我第二次单击“退出”时,它返回到 SignInActivity。

MainActivity.java

case R.id.menu_sign_out:
     AuthUI.getInstance().signOut(MainActivity.this);
     startActivity(new Intent(MainActivity.this, SignInActivity.class));

SignInActiviy.java

mAuthStateListener = new FirebaseAuth.AuthStateListener()
        {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth)
            {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                Log.d(TAG, "[SignInActivity]current user:" + user);
                if (user != null)
                {
                    //user is signed in
                    Toast.makeText(SignInActivity.this, "You're signed in.", Toast.LENGTH_SHORT).show();
                    startActivity(new Intent(SignInActivity.this, MainActivity.class));
                }
            }
        };

@Override
    protected void onPause()
    {
        super.onPause();
        if (mAuthStateListener != null)
        {
            mFirebaseAuth.removeAuthStateListener(mAuthStateListener);
        }

    }

    @Override
    protected void onResume()
    {
        super.onResume();
        mFirebaseAuth.addAuthStateListener(mAuthStateListener);
    }

标签: androidfirebase-authenticationfirebaseui

解决方案


使用“.addOnCompleteListener”解决问题

Firebase AuthUI 似乎是异步的

所以在退出后立即调用登录

退出过程尚未完成。

AuthUI.getInstance().signOut(this)
  .addOnCompleteListener(new OnCompleteListener<Void>()
  {
    public void onComplete(@NonNull Task<Void> task)
    {
      StartActivity(new Intent(MainActivity.this, SignInActivity.class));
    }
  });

推荐阅读