2016-11-08 3 views
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?

+0

Ich denke nicht, dass Sie eine asynchrone Aufgabe erstellen müssen, da FirebaseAuth das für Sie behandelt. – Linxy

+0

Das war, was ich das erste Mal gemacht habe, aber ich habe Logcat gefunden, das etwas wie: zu viel Arbeit am Hauptthread sagt. –

+0

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

Antwort

0

Problem gelöst, Ich fand im XML-Layout, dass ich vergessen habe, die "android: onClick" von der Schaltfläche zu entfernen.