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)