MainActivty должен вести к LoginActivity, но пропускает его. Приводит к MapActivity, который должен быть виден только после входа в систему

Кажется, я что-то изменил в своем коде, и я не могу понять, что мне нужно вернуть.

Я создаю приложение, у которого будет MainActivity, который приведет к loginActivity. Однако, когда кнопка входа в систему нажата, приложение теперь пропускает это и переходит к MapActivity, который должен быть виден только зарегистрированным пользователям.

Я проверил свой код MainActivity и не думаю, что проблема в этом, я думаю, что это код LoginActivity:

public class ResponderLoginActivity extends AppCompatActivity {
    private EditText mEmail, mPassword;
    private Button mLogin, mRegistration;

    private FirebaseAuth mAuth;
    private FirebaseAuth.AuthStateListener firebaseAuthListener;

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

        mAuth = FirebaseAuth.getInstance();

        firebaseAuthListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                if (user != null) {
                    Intent intent = new Intent(ResponderLoginActivity.this, ResponderMapActivity.class);
                    startActivity(intent);
                    finish();
                    return;
                }
            }
        };

        mEmail = (EditText) findViewById(R.id.email);
        mPassword = (EditText) findViewById(R.id.password);

        mLogin = (Button) findViewById(R.id.login);
        mRegistration = (Button) findViewById(R.id.registration);

        mRegistration.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final String email = mEmail.getText().toString();
                final String password = mPassword.getText().toString();
                mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(ResponderLoginActivity.this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (!task.isSuccessful()) {
                            Toast.makeText(ResponderLoginActivity.this, "sign up error", Toast.LENGTH_SHORT).show();
                        } else {
                            String user_id = mAuth.getCurrentUser().getUid();
                            DatabaseReference current_user_db = FirebaseDatabase.getInstance().getReference().child("Users").child("Responders").child(user_id);
                            current_user_db.setValue(true);
                        }
                    }
                });
            }
        });

        mLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String email = mEmail.getText().toString();
                final String password = mPassword.getText().toString();
                mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(ResponderLoginActivity.this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (!task.isSuccessful()) {
                            Toast.makeText(ResponderLoginActivity.this, "Sign in error", Toast.LENGTH_SHORT).show();

                        }
                    }
                });
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        mAuth.addAuthStateListener(firebaseAuthListener);
    }

    @Override
    protected void onStop() {
        super.onStop();
        mAuth.removeAuthStateListener(firebaseAuthListener);
    }
}

Не вижу ничего очевидного. Вы пробовали отладку? Кроме того, возврат из системы управления версиями и повторение изменений, пока это не произойдет?

Squirrelkiller 31.07.2018 22:11

Вы получаете user != null в onAuthStateChanged , поэтому, когда вы нажимаете кнопку входа в MainActivity, он перемещает вас к ResponderLoginActivity, а в onCreate из ResponderLoginActivity объект FirebaseUser уже имеет какое-то пользовательское значение, отличное от null, поэтому он перемещает вас к MapActivity

Varad Mondkar 31.07.2018 22:17

@Squirrelkiller Да, попробовал отладить, но так как я всего лишь любитель, я не мог определить причину, по которой он пропускал. Я вернул свой код с того места, где остановился накануне вечером, когда он работал, а приложение все еще пропускает loginActivity.

James Boyle 31.07.2018 22:26

Проверить это stackoverflow.com/a/35541827/3762067

Varad Mondkar 31.07.2018 22:27

@VaradMondkar, так ты говоришь, что я должен удалить user !=null?

James Boyle 31.07.2018 22:29

Поместите тост в обработчик, который показывает вошедшего в систему пользователя и некоторые данные. Может быть, узнать, можно ли попросить этот пользовательский объект о каком-то статусе? Также в целях эксперимента, прежде чем прикреплять обработчик, попробуйте выйти из системы всех пользователей.

Squirrelkiller 31.07.2018 22:30

Да, поскольку ваш MainActivity не является активным, просто позвоните по линии FirebaseAuth.getInstance().signOut(); на MainActivity. Таким образом, ваш пользователь выйдет из системы, когда перейдет к MainActivity.

Varad Mondkar 31.07.2018 22:31

Или поставьте проверку MainActivity, является ли user != null, и если это правда (что означает, что пользователь пришел к MainActivity, даже когда он вошел в систему), намерение его к MapActivity

Varad Mondkar 31.07.2018 22:36

Спасибо @VaradMondkar, следует ли это вызывать в методе или его можно разместить в любом месте MainActivity?

James Boyle 31.07.2018 22:37

Назовите это в onCreate из MainActivity

Varad Mondkar 31.07.2018 22:38

Спасибо, проблема решена. Спасибо за вашу помощь :)

James Boyle 31.07.2018 22:40

Удачного кодирования :)

Varad Mondkar 31.07.2018 23:11
0
12
33
0

Другие вопросы по теме