我有两个活动MainActivity和signUp。 MainActivity是在应用程序启动时创建的,它会获取Firebase身份验证实例,如果找不到用户,则进行注册。
public class MainActivity extends AppCompatActivity {
Intent intent;
FirebaseAuth.AuthStateListener authStateListener;
FirebaseAuth firebaseAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("MainActivity","Created..");
new Handler().postDelayed(() -> {
firebaseAuth = FirebaseAuth.getInstance();
authStateListener = firebaseAuth -> {
FirebaseUser user = firebaseAuth.getCurrentUser();
if(user!=null) {
intent = new Intent(MainActivity.this, HomeScreen.class);
Log.d("Authentication", "User already signed in..");
intent.putExtra("state", "alreadySignIned");
startActivity(intent);
MainActivity.this.finish();
}
};
intent = new Intent(this,signUp.class);
startActivity(intent);
MainActivity.this.finish();
firebaseAuth.addAuthStateListener(authStateListener);
},5000);
}
}
现在,当新用户在signUp中注册时,它将进入主屏幕活动,但是我面临的问题是,当新用户注册并从MainActivity启动意图时,authStateListener正在获取用户。
public class signUp extends AppCompatActivity {
Intent intent;
FirebaseAuth firebaseAuth;
boolean buttonPress = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.signup);
EditText emailUp,passUp,userName;
Button signUp;
TextView toSignIn;
emailUp = findViewById(R.id.signUpEmail);
passUp = findViewById(R.id.signUpPass);
signUp = findViewById(R.id.signUpButton);
userName = findViewById(R.id.signUpUserName);
toSignIn = findViewById(R.id.toSignIn);
firebaseAuth = FirebaseAuth.getInstance();
signUp.setOnClickListener(v -> {
buttonPress = true;
String email = emailUp.getText().toString();
String pass = passUp.getText().toString();
String name = userName.getText().toString();
if(email.isEmpty()){
emailUp.setError("Please enter email id..");
emailUp.requestFocus();
} else if(pass.isEmpty()){
passUp.setError("Please enter password..");
passUp.requestFocus();
} else {
firebaseAuth.createUserWithEmailAndPassword(email,pass).addOnCompleteListener(task -> {
if(!task.isSuccessful()){
Toast.makeText(signUp.this,"Sign up Unsuccessful, please try again.",Toast.LENGTH_SHORT).show();
} else {
Log.d("Authentication","User signing up..");
intent = new Intent(this,HomeScreen.class);
intent.putExtra("state","signedUp");
intent.putExtra("name",name);
startActivity(intent);
signUp.this.finish();
}
});
}
});
}
}
这里是主屏幕活动的日志
2020-05-18 14:04:33.355 29696-29696/com.example.movietracker I/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzaq@8f143e5
2020-05-18 14:05:04.668 29696-29711/com.example.movietracker D/FirebaseAuth: Notifying id token listeners about user ( 82Q12yEqqjUP0AWGuGoxok4pvae2 ).
2020-05-18 14:05:04.669 29696-29711/com.example.movietracker D/FirebaseAuth: Notifying auth state listeners about user ( 82Q12yEqqjUP0AWGuGoxok4pvae2 ).
2020-05-18 14:05:04.669 29696-29696/com.example.movietracker D/Authentication: User already signed in..
2020-05-18 14:05:04.734 29696-29696/com.example.movietracker D/Homescreen Activity: Created..
2020-05-18 14:05:04.734 29696-29696/com.example.movietracker D/Intent: State alreadySignIned
2020-05-18 14:05:04.771 29696-29696/com.example.movietracker D/Cursor: Count on create 0
2020-05-18 14:05:04.773 29696-29696/com.example.movietracker D/Homescreen Activity: Started..
2020-05-18 14:05:04.773 29696-29696/com.example.movietracker D/Username: Username null
2020-05-18 14:05:04.819 29696-29696/com.example.movietracker D/NetworkSecurityConfig: No Network Security Config specified, using platform default
2020-05-18 14:05:04.826 29696-29696/com.example.movietracker D/WatchList DB: Size 0
2020-05-18 14:05:04.826 29696-29696/com.example.movietracker D/WatchListID: Size 0
2020-05-18 14:05:04.838 29696-29696/com.example.movietracker D/Authentication: User signing up..
这里是在注册时通知authStateListener,并在执行一些代码后从signUp类获取意图。我希望它销毁MainActivity并直接从signUp中获取意图,而无需通知authStateListener。
请帮助。
[MainActivity
始终启动signup
Activity
。在用户已经存在的情况下,也会启动HomeScreen
Activity
。这可能不是您想要的。
此外,authListener
回调调用MainActivity.this.finish()
,但是到现在,MainActivity
已经完成,所以这也是错误的。
如果您不希望在用户注册时触发authListener
,则应在创建用户之前删除侦听器。
通常来说,您的代码可以改进。您应该查看更多教程,以更好地了解如何执行此操作。
您可以破坏这样的活动:
步骤1:在MainActivity中声明Activity
变量
public static Activity MainActivityContext;
步骤2:在MainActivityContext
的OnCreate
方法中初始化MainActivity
变量
MaMainActivityContext = this;
步骤3:现在转到要销毁MainActivity
并编写的Java语句
MainActivity.MainActivityContext.finish();