Android 我想摧毁启动新意图的活动
我有两个活动:主要活动和注册。MainActivity是在应用程序启动并获得firebase身份验证实例时创建的,如果找不到用户,则进行注册Android 我想摧毁启动新意图的活动,android,firebase,authentication,android-intent,activity-lifecycle,Android,Firebase,Authentication,Android Intent,Activity Lifecycle,我有两个活动:主要活动和注册。MainActivity是在应用程序启动并获得firebase身份验证实例时创建的,如果找不到用户,则进行注册 public class MainActivity extends AppCompatActivity { Intent intent; FirebaseAuth.AuthStateListener authStateListener; FirebaseAuth firebaseAuth; @Override protected void onCre
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);
}
}
现在,当新用户在注册中注册时,它将转到主屏幕活动,但我面临的问题是,authStateListener在新用户注册时获取用户,并从MainActivity启动intent
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,在一些代码之后,它从注册类中获取意图。我希望它销毁MainActivity并直接从注册中获取意图,而不通知authStateListener
请帮助。您可以销毁以下活动: 步骤1:在MainActivity中声明一个
Activity
变量
public static Activity MainActivityContext;
步骤2:初始化MainActivityContext
中的变量OnCreate
方法MainActivity
MaMainActivityContext = this;
步骤3:现在转到要销毁MainActivity
并写入的java语句
MainActivity.MainActivityContext.finish();
您可以销毁这样的活动: 步骤1:在MainActivity中声明一个
Activity
变量
public static Activity MainActivityContext;
步骤2:初始化MainActivityContext
中的变量OnCreate
方法MainActivity
MaMainActivityContext = this;
步骤3:现在转到要销毁MainActivity
并写入的java语句
MainActivity.MainActivityContext.finish();
main活动
始终启动注册
活动
。如果用户已经存在,主屏幕
活动
也会启动。这可能不是你想要的
另外,authListener
回调调用MainActivity.this.finish()
,但此时,MainActivity
已经完成,因此这也是错误的
如果不希望在用户注册时触发authListener
,则应在创建用户之前删除该侦听器
一般来说,您的代码可以改进。您应该阅读更多教程,以更好地了解如何执行此操作。
MainActivity
始终启动注册活动。如果用户已经存在,主屏幕
活动
也会启动。这可能不是你想要的
另外,authListener
回调调用MainActivity.this.finish()
,但此时,MainActivity
已经完成,因此这也是错误的
如果不希望在用户注册时触发authListener
,则应在创建用户之前删除该侦听器
一般来说,您的代码可以改进。您应该阅读更多教程,以更好地了解如何执行此操作。您不会将对活动的引用存储在静态变量中。这会导致内存泄漏,这是一种不好的做法。您没有将对活动的引用存储在静态变量中。这会导致内存泄漏,这是一种糟糕的做法。谢谢,我理解了这个问题。我不知道如何删除侦听器。现在我已经实现了。谢谢,我理解了这个问题。我不知道如何删除侦听器。现在我已经实现了它。