Кажется, я что-то изменил в своем коде, и я не могу понять, что мне нужно вернуть.
Я создаю приложение, у которого будет 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);
}
}
Вы получаете user != null в onAuthStateChanged , поэтому, когда вы нажимаете кнопку входа в MainActivity, он перемещает вас к ResponderLoginActivity, а в onCreate из ResponderLoginActivity объект FirebaseUser уже имеет какое-то пользовательское значение, отличное от null, поэтому он перемещает вас к MapActivity
@Squirrelkiller Да, попробовал отладить, но так как я всего лишь любитель, я не мог определить причину, по которой он пропускал. Я вернул свой код с того места, где остановился накануне вечером, когда он работал, а приложение все еще пропускает loginActivity.
Проверить это stackoverflow.com/a/35541827/3762067
@VaradMondkar, так ты говоришь, что я должен удалить user !=null?
Поместите тост в обработчик, который показывает вошедшего в систему пользователя и некоторые данные. Может быть, узнать, можно ли попросить этот пользовательский объект о каком-то статусе? Также в целях эксперимента, прежде чем прикреплять обработчик, попробуйте выйти из системы всех пользователей.
Да, поскольку ваш MainActivity не является активным, просто позвоните по линии FirebaseAuth.getInstance().signOut(); на MainActivity. Таким образом, ваш пользователь выйдет из системы, когда перейдет к MainActivity.
Или поставьте проверку MainActivity, является ли user != null, и если это правда (что означает, что пользователь пришел к MainActivity, даже когда он вошел в систему), намерение его к MapActivity
Спасибо @VaradMondkar, следует ли это вызывать в методе или его можно разместить в любом месте MainActivity?
Назовите это в onCreate из MainActivity
Спасибо, проблема решена. Спасибо за вашу помощь :)
Удачного кодирования :)
Не вижу ничего очевидного. Вы пробовали отладку? Кроме того, возврат из системы управления версиями и повторение изменений, пока это не произойдет?