Данные загружаются из Firestore асинхронно.К моменту запуска if(ID == s)
данные еще не загружены.
Вам потребуется вызвать код, который перенаправляет (создает намерение и запускает действие) внутри onComplete
методов.
Итак, сначала определите функцию:
public void redirect(User user, char id) {
if(user.isEmailVerified()) {
if (id == 'e') {
Intent k = new Intent(login_page.this,home_screen_employer.class);
startActivity(k);
}
else {
Intent k = new Intent(login_page.this,home_screen_worker.class);
startActivity(k);
}
}
}
А затем вызовите ее из двух onComplete
методов:
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()) {
mDatabase.collection("employer").document(mUser.getUid()).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful())
{
DocumentSnapshot documentSnapshot = task.getResult();
index = documentSnapshot.getString("ID");
redirect(mUser, index.charAt(0));
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
mDatabase.collection("worker").document(mUser.getUid()).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
DocumentSnapshot documentSnapshot = task.getResult();
index = documentSnapshot.getString("ID");
redirect(mUser, index.charAt(0));
}
});
}
});
Рефакторинг этого немного для использования успешных слушателей приводит к:
mAuth.signInWithEmailAndPassword(email, password)
.addOnSuccessListener(this, new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
mDatabase.collection("employer").document(mUser.getUid()).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot doc) {
index = doc.getString("ID");
redirect(mUser, index.charAt(0));
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
mDatabase.collection("worker").document(mUser.getUid()).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot doc) {
index = doc.getString("ID");
redirect(mUser, index.charAt(0));
}
});
}
});
И затем рефакторингу, чтобы избавиться от дублированного разбора документа:
mAuth.signInWithEmailAndPassword(email, password)
.addOnSuccessListener(this, new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
mDatabase.collection("employer").document(mUser.getUid()).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot doc) {
redirect(mUser, doc);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
mDatabase.collection("worker").document(mUser.getUid()).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot doc) {
redirect(mUser, doc);
}
});
}
});
С этим обновленным определением redirect
функция:
public void redirect(User user, Document doc) {
if(user.isEmailVerified()) {
char id = doc.getString("ID").charAt(0);
if (id == 'e') {
Intent k = new Intent(login_page.this,home_screen_employer.class);
startActivity(k);
}
else {
Intent k = new Intent(login_page.this,home_screen_worker.class);
startActivity(k);
}
}
}