Здравствуйте, я пытаюсь создать систему входа для своего приложения. Я пытаюсь убедиться, что я вошел в систему, прежде чем перейти к следующему действию, но firebase, похоже, перестает пытаться войти в систему, если я вхожу в цикл while. Как серьезно wtf? Я создаю это в студии Android.CreateUserWithEmailandPassword останавливается при входе в цикл?
Вот код:
void handleLogin() {
//Check our form
if (!validateForm()) {
Toast.makeText(getApplication(), "All Fields Required",
Toast.LENGTH_SHORT).show();
return;
}
//Sign in the user
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult> () {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d(TAG, "signInWithEmail:onComplete:" + task.isSuccessful());
if (!task.isSuccessful()) {
Log.w(TAG, "signInWithEmail", task.getException());
Toast.makeText(getApplication(), "Authentication failed.",
Toast.LENGTH_SHORT).show();
}
}
});
}
/*************************************************
* ON CREATE - The Activity runs from here!
*************************************************/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAuth = FirebaseAuth.getInstance();
setContentView(R.layout.activity_create_profile);
//Checking authState from Firebase
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth mAuth) {
FirebaseUser user = mAuth.getCurrentUser();
if (user != null) {
Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
isLogged = true;
System.out.println("Logged in: " + isLogged);
} else {
Log.d(TAG, "onAuthStateChanged:signed_out");
}
}
};
//Pop up for when adminID is activated
adminIDField = (EditText) findViewById(R.id.editText13);
adminIDField.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus)
showPopUp();
else
System.out.println("Admin ID entered...");
}
});
// Create Profile Button
createProfile = (Button) findViewById(R.id.button13);
createProfile.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Calendar currentTime = Calendar.getInstance();
Calendar timeOut = (Calendar)currentTime.clone();
timeOut.add(Calendar.SECOND, 10);
emailString = (EditText) findViewById(R.id.editText7);
passwordString = (EditText) findViewById(R.id.editText8);
firstNameField = (EditText) findViewById(R.id.editText10);
lastNameField = (EditText) findViewById(R.id.editText11);
apartmentField = (EditText) findViewById(R.id.editText12);
Intent intent = new Intent("android.intent.action.MENU");
handleLogin();
while(!isLogged){ //THIS IS WHERE MY PROBLEM OCCURS
System.out.println("Authenticating...");
try{
Thread.sleep(250);
}catch (InterruptedException e){
e.printStackTrace();
}
}
//handleDataStorage();
//startActivity(intent);
}
});
}
По какой-то причине, когда я не имею петлю в то время как там он регистрирует меня просто отлично, но когда я включаю вход в то время как цикл он остается там навсегда. Почему это?
Я не знаю, почему это не работает (возможно Auth слушатель не срабатывает, когда поток спит), но почему вам нужен цикл while, если слушатель срабатывает только при изменении состояния auth? –
@RohitNavarathna Мне это нужно, потому что по какой-то причине (я думаю, что это асинхронная проблема) мое приложение прорвется через мои функции, не дожидаясь, когда он действительно войдет в firebase, а затем испортит кучу вещей для создания пользователей. Поэтому я хочу дождаться изменения состояния auth (или определенного количества времени), а затем перейти к следующему действию. – dylanjm
Почему бы просто не начать новую активность в состоянии '(user! = Null)' состояния прослушивателя состояния auth? –