Android-Firebase-注册和登录按钮不起作用

时间:2019-11-26 22:57:18

标签: android firebase firebase-authentication

我正在使用户注册和使用Firebase登录。这是问题所在。

  1. 单击“ REGISTER”按钮后,它应该跳到LoginActivity。但是,它直接跳至个人资料活动之一。
  2. 单击“登录”按钮后,它应该已经根据该帐户的用户类型跳至个人资料活动。用户注册后,我在数据库中添加了用户类型。但是,“登录”按钮不起作用。

注册码:

public class Register extends AppCompatActivity implements View.OnClickListener {

    private EditText registerName, registerEmail, registerPassword;
    private ProgressBar progressBar;
    private FirebaseAuth mAuth;


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


        registerName = findViewById(R.id.register_name);
        registerEmail = findViewById(R.id.register_email);
        registerPassword = findViewById(R.id.register_password);
        progressBar = findViewById(R.id.progressbar);
        progressBar.setVisibility(View.GONE);

        mAuth = FirebaseAuth.getInstance();

        findViewById(R.id.btn_register).setOnClickListener(this);

    }



    @Override
    protected void onStart() {
        super.onStart();

        if (mAuth.getCurrentUser() != null) {
            //handle the already login user
        }
    }

    private void registerUser() {
        final String name = registerName.getText().toString().trim();
        final String email = registerEmail.getText().toString().trim();
        String password = registerPassword.getText().toString().trim();

        if (name.isEmpty()) {
            registerName.setError("name required");
            registerName.requestFocus();
            return;
        }

        if (email.isEmpty()) {
            registerEmail.setError("email required");
            registerEmail.requestFocus();
            return;
        }

        if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
            registerEmail.setError("enter a valid email");
            registerEmail.requestFocus();
            return;
        }

        if (password.isEmpty()) {
            registerPassword.setError("password required");
            registerPassword.requestFocus();
            return;
        }

        if (password.length() < 6) {
            registerPassword.setError("password should be at least 6 characters long");
            registerPassword.requestFocus();
            return;
        }

        progressBar.setVisibility(View.VISIBLE);
        mAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {

                        if (task.isSuccessful()) {

                            User user = new User(
                                    name,
                                    email
                            );

                            FirebaseDatabase.getInstance().getReference("Users")
                                    .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                                    .setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    progressBar.setVisibility(View.GONE);
                                    if (task.isSuccessful()) {

                                        openLoginActivity();

                                    } else {
                                        //display a failure message
                                    }
                                }
                            });

                        } else {
                            Toast.makeText(Register.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();
                        }
                    }
                });

    }

    public void openLoginActivity() {
        Intent intent = new Intent(this, LoginActivity.class);
        startActivity(intent);
    }


    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_register:
                registerUser();
                break;
        }

    }
}

LoginActivity代码:

public class LoginActivity extends AppCompatActivity {

    private EditText LoginEmail, LoginPassword;
    private FirebaseAuth auth;
    private Button btnLogin;
    private Button JumpToRegister;
    private DatabaseReference LoginDatabase;

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

        auth = FirebaseAuth.getInstance();
        if (auth.getCurrentUser()!=null){
            startActivity(new Intent(LoginActivity.this, inspector_profile.class));
            finish();
        }

        LoginEmail = findViewById(R.id.email);
        LoginPassword = findViewById(R.id.password);

        btnLogin = findViewById(R.id.btn_login);

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String email = LoginEmail.getText().toString();
                final String password = LoginPassword.getText().toString();

                if (TextUtils.isEmpty(email)) {
                    Toast.makeText(getApplicationContext(), "Enter email address!", Toast.LENGTH_SHORT).show();
                    return;
                }

                if (TextUtils.isEmpty(password)) {
                    Toast.makeText(getApplicationContext(), "Enter password!", Toast.LENGTH_SHORT).show();
                    return;
                }


            }
        });

        JumpToRegister = findViewById(R.id.btn_to_register);
        JumpToRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(LoginActivity.this, Register.class);
                startActivity(intent);
            }
        });


        }

    private void loginUser(final String LoginEmail, final String LoginPassword) {



        auth.signInWithEmailAndPassword(LoginEmail, LoginPassword)
                .addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        // If sign in fails, display a message to the user. If sign in succeeds
                        // the auth state listener will be notified and logic to handle the
                        // signed in user can be handled in the listener.

                        if (task.isSuccessful()) {

                            FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
                            String RegisterUserID = currentUser.getUid();

                            LoginDatabase = FirebaseDatabase.getInstance().getReference()
                                    .child("Users").child(RegisterUserID);
                            LoginDatabase.addValueEventListener(new ValueEventListener() {
                                @Override
                                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                    String userType = dataSnapshot.child("userType").getValue().toString();
                                    if (userType.equals("Inspector")){
                                        Intent intentInspector = new Intent(LoginActivity.this, inspector_profile.class);
                                        intentInspector.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                                        startActivity(intentInspector);
                                        finish();
                                    }else if (userType.equals("Group Leader")){
                                        Intent intentIGrLd = new Intent(LoginActivity.this, grLd_profile.class);
                                        intentIGrLd.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                                        startActivity(intentIGrLd);
                                        finish();
                                    }else if (userType.equals("Specialist Engineer")){
                                        Intent intentISplEgn = new Intent(LoginActivity.this, SplEgn_profile.class);
                                        intentISplEgn.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                                        startActivity(intentISplEgn);
                                        finish();
                                    }else if (userType.equals("Senior Manager")){
                                        Intent intentISnMng = new Intent(LoginActivity.this, SnMng_profile.class);
                                        intentISnMng.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                                        startActivity(intentISnMng);
                                        finish();
                                    }
                                }

                                @Override
                                public void onCancelled(@NonNull DatabaseError databaseError) {

                                }
                            });

                                   /* Intent intent = new Intent(LoginActivity.this, inspector_profile.class);
                                    startActivity(intent);
                                    finish();*/

                        } else {
                            // there was an error
                            FirebaseAuthException e = (FirebaseAuthException)task.getException();
                            Toast.makeText(LoginActivity.this, "Failed Login: "+e.getMessage(),Toast.LENGTH_SHORT).show();
                            return;
                        }
                    }
                });
    }


}

1 个答案:

答案 0 :(得分:0)

当您从注册进入登录活动时,在登录的oncreate中,您正在检查用户是否已登录

        if (auth.getCurrentUser()!=null){
            startActivity(new Intent(LoginActivity.this, inspector_profile.class));
            finish();
        }

在firebase auth中进行注册时,它还会使用户登录。因此,您可能需要更改逻辑。