我想在开始新意图时破坏活动

问题描述 投票:1回答:2

我有两个活动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。

请帮助。

android firebase authentication android-intent activity-lifecycle
2个回答
0
投票

[MainActivity始终启动signup Activity。在用户已经存在的情况下,也会启动HomeScreen Activity。这可能不是您想要的。

此外,authListener回调调用MainActivity.this.finish(),但是到现在,MainActivity已经完成,所以这也是错误的。

如果您不希望在用户注册时触发authListener,则应在创建用户之前删除侦听器。

通常来说,您的代码可以改进。您应该查看更多教程,以更好地了解如何执行此操作。


0
投票

您可以破坏这样的活动:

步骤1:在MainActivity中声明Activity变量

public static Activity MainActivityContext;

步骤2:在MainActivityContextOnCreate方法中初始化MainActivity变量

MaMainActivityContext = this;

步骤3:现在转到要销毁MainActivity并编写的Java语句

MainActivity.MainActivityContext.finish();
© www.soinside.com 2019 - 2024. All rights reserved.