Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何解决此AuthStateListener问题_Android_Firebase Authentication - Fatal编程技术网

Android 如何解决此AuthStateListener问题

Android 如何解决此AuthStateListener问题,android,firebase-authentication,Android,Firebase Authentication,我有两项活动:登录和注册。它们每个都有一个AuthStateListener 问题是当应用程序处于SignUpactivity且身份验证状态已更改时(在我登录这两个侦听器时发现),会调用SignIn活动中的AuthStateListener 一旦创建签名方法: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVi

我有两项活动:
登录
注册
。它们每个都有一个AuthStateListener

问题是当应用程序处于
SignUp
activity且身份验证状态已更改时(在我登录这两个侦听器时发现),会调用
SignIn
活动中的AuthStateListener

一旦创建签名方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sign_in);

    mAuth = FirebaseAuth.getInstance();

    mAuth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            progressBar.setVisibility(View.INVISIBLE);
            if (mAuth.getCurrentUser() != null && isEmailVerified()) {
                Toast.makeText(SignIn.this, "Signed In", Toast.LENGTH_SHORT).show();
                finish();
                startActivity(new Intent(SignIn.this, UserProfile.class));
            } else if (mAuth.getCurrentUser() != null) {
                mAuth.getCurrentUser().sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        Toast.makeText(SignIn.this, "Verification email sent You can sign in once your account is verified.", Toast.LENGTH_SHORT).show();
                        mAuth.signOut();
                    }
                });
            }
        }
    });

   ........
}

如何解决此问题?

如果您不想再调用
AuthStateListener
,则需要通过调用来注销它

这意味着您需要跟踪侦听器,因此:

listener = new FirebaseAuth.AuthStateListener() {
  ...
}
mAuth.addAuthStateListener(listener);
您通常会在注册它们的相反生命周期事件中这样做。在您的情况下,我建议将
addAuthStateListener
移动到
onStart
上,然后在
onStop
onPause
中用

mAuth.removeAuthStateListener(listener)

在阅读了您的答案后,我创建了一个
FirebaseAuth.AuthStateListener
的实例,并将其与
mAuth.addAuthStateListener(AuthStateListener)类似
mAuth.removeAuthStateListener(authStateListener)它工作得很好,但是您在第一个代码片段中提到了一个
侦听器
对象。我不明白这个
侦听器
对象的类名是什么。如果您能澄清这一点,这将对我非常有帮助。参考链接文档,
listener
是一个
FirebaseAuth.AuthStateListener
。但问题是我无法放置
mAuth.addAuthStateListener(新的FirebaseAuth.AuthStateListener(){…
listener
中,因为此方法是
void
方法,并且不会返回任何内容。我认为您的解决方案需要稍微更正。啊,是的,这是我代码中的一个错误。我更新了它。
mAuth.removeAuthStateListener(listener)