0
Ich benutze Firebase Auth (Registrierung eines neuen Benutzers), es funktionierte perfekt auf den Haupt Thread, aber wenn ich es in den Hintergrund verschoben, Authentifizierung immer gescheitert. Hier ist das Verfahren zum Erstellen eines neuen Benutzers:Firebase Auth funktioniert nicht in Async Aufgabe
public void createAccount(String email, String password) {
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d(TAG, "createUserWithEmail:onComplete:" + task.isSuccessful());
// 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()) {
Toast.makeText(registerActivity.this, "bad",
Toast.LENGTH_SHORT).show();
sr = false;
} else {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
EditText etname = (EditText) findViewById(R.id.etName);
EditText etlname = (EditText) findViewById(R.id.etLName);
String namez = etname.getText().toString();
String lnamez = etlname.getText().toString();
DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();
Toast.makeText(registerActivity.this, "good", Toast.LENGTH_SHORT).show();
String UID = user.getUid();
mDatabase.child("users").child(UID + "_lname").setValue(lnamez);
mDatabase.child("users").child(UID + "_name").setValue(namez);
sr = true;
}
}
// ...
}
});
}
und hier ist die AsyncTask:
private class createInBack extends AsyncTask<Void, Void, Void> {
//Executes the 'createAccount' method in background .
EditText etemail = (EditText) findViewById(R.id.etEmail);
EditText etpassword = (EditText) findViewById(R.id.etPassword);
String email = etemail.getText().toString();
String password = etpassword.getText().toString();
@Override
protected void onPreExecute() {
super.onPreExecute();
spinner.setVisibility(View.VISIBLE);
}
@Override
protected Void doInBackground(Void... voids) {
createAccount(email, password);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if(sr){
Toast.makeText(registerActivity.this, "we good here", Toast.LENGTH_SHORT).show();
startActivity(new Intent(registerActivity.this, MainActivity.class));
}
spinner.setVisibility(View.GONE);
}
}
so, was das Problem ist?
Ich denke nicht, dass Sie eine asynchrone Aufgabe erstellen müssen, da FirebaseAuth das für Sie behandelt. – Linxy
Das war, was ich das erste Mal gemacht habe, aber ich habe Logcat gefunden, das etwas wie: zu viel Arbeit am Hauptthread sagt. –
Hmm .. ich wüsste nicht warum das so ist. Aber sind Sie sicher, dass onPostExecute() wirklich nach onComplete() von createAccount() aufgerufen wird? Weil ich nicht denke, dass es ist und das könnte Dinge für Sie verderben, wie Sie sofort eine neue Aktivität starten und eine Aufgabe abbrechen, die noch in Bearbeitung sein könnte. – Linxy