2016-07-17 6 views
1

Ich benutze derzeit tutorial von AndroidHive, um zu lernen, wie man Firebase verwendet, ich beginne jetzt, die Methoden und Dokumentation gut zu verstehen - ich erkannte, dass Firebase eine Anmelde-/Anmelde-Methode mit E-Mail und Passwort bietet und dass diese Information nicht in unserer Datenbank gespeichert ist.Firebase Login und Anmeldung mit Benutzername

Ich möchte ein System implementieren, wo sie bei der Anmeldung ihre E-Mail, Passwort und einen Benutzernamen zusammen mit einigen anderen Daten zur Verfügung stellen und alles wird in der Datenbank gespeichert. Damit kann der Benutzer sich dann mit seiner E-Mail oder seinem Benutzernamen anmelden. Ich habe diesen Artikel auf dem Stapel, die offenbar ist die answer auf diese Frage ich frage - aber ich weiß nicht ganz verstehen und wie es verbindet mit meinem Code unten

auth.createUserWithEmailAndPassword(email, password) 
.addOnCompleteListener(SignupActivity.this, new OnCompleteListener<AuthResult>() { 
@Override 
public void onComplete(@NonNull Task<AuthResult> task) { 
    Toast.makeText(SignupActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show(); 
    progressBar.setVisibility(View.GONE); 

    if (!task.isSuccessful()) { 
     Toast.makeText(SignupActivity.this, "Authentication failed." + task.getException(), 
      Toast.LENGTH_SHORT).show(); 
    } else { 
     startActivity(new Intent(SignupActivity.this, MainActivity.class)); 
     finish(); 
    } 
} 
}); 

Jede Hilfe ist sehr geschätzt dank

Antwort

1

Try this:

auth.createUserWithEmailAndPassword(email, password) 
.addOnCompleteListener(SignupActivity.this, new OnCompleteListener<AuthResult>() { 
@Override 
public void onComplete(@NonNull Task<AuthResult> task) { 
    Toast.makeText(SignupActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show(); 
    progressBar.setVisibility(View.GONE); 
    generateUser(email, password) 

    if (!task.isSuccessful()) { 
     Toast.makeText(SignupActivity.this, "Authentication failed." + task.getException(), 
      Toast.LENGTH_SHORT).show(); 
    } else { 
     startActivity(new Intent(SignupActivity.this, MainActivity.class)); 
     finish(); 
    } 
} 
}); 

Mit dieser Methode wird die oben genannt wird.

public void generateUser(String username, String password) 
{ 

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference users = database.getReference("users"); //users is a node in your Firebase Database. 
User user = new User(username, password); //ObjectClass for Users 
users.push().setValue(user); 

} 

auch: User.class

public class User { 

    String username; 
    String password; 

    public User() { 
    //Empty Constructor For Firebase 
    } 


public User(String username, String password) 
     { 
     this.username = username; //Parameterized for Program-Inhouse objects. 
     this.password = password; 
     } 

    //Getters and Setters 
    public String getUsername() 
    { 
    return username; 
    } 
    public void setUsername(String username) 
    { 
    this.username = username; 
    } 
    public String getPassword() 
    { 
    return password; 
    } 
    public void setPassword(String password) 
    { 
    this.password = password; 
    } 
} 
+0

ah dies funktioniert dank, ich war mir nicht ganz sicher über die Struktur, aber das hat die Dinge aufgeräumt – TerribleCoder

+0

Ich würde Ihnen auch empfehlen, das Passwort zu verschlüsseln, bevor Sie es an die Datenbank senden. Ich würde dir empfehlen, sie sanft zu verschlüsseln. Vielleicht versuchen Sie Folgendes: [140Encryptor] (https://github.com/tanishqsh/140Encryptor/blob/master/README.md) –

+0

Danke, Ja Ich habe bereits eine Verschlüsselungsmethode in meiner Klasse erstellt, ich bekomme einen Fehler mit https://drive.google.com/file/d/0B4vL9wnJulKoN3gxajFBUUhUX1E/view?usp=sharing bist du sicher, dass der User-Konstruktor leer sein muss? Sorry, ich denke nur an pure java Ich bin neu in Firebase, auch gibt es einen Fehler mit Push aswell kann Typ nicht auflösen, ich habe die Datenbank importiert und hinzugefügt, um Gradle zu erstellen – TerribleCoder

0

Lösen Sie die Zugabe von .getDatabase(); zuerst. Dies ist keine native Firebase-Methode, mein Fehler.

Ich habe dein Problem.

Machen Sie FirebaseDatabase zu einer globalen Variablen und initialisieren Sie sie in onCreate. Es erfordert einen Kontext an dem Punkt.

Nehmen Sie einfach FirebaseDatabase database; vor onCreate.

Und In, onCreate: initialisieren, database=FirebaseDatabase.getInstance();.

Nicht in Methode initialisieren. Ich werde meine vorherige Antwort bald bearbeiten.

+0

Okay, wenn ich SetValue ohne Push verwenden, funktioniert es, aber ich brauche Benutzerkonten zu stapeln nicht löschen, sobald jemand anderes sich anmeldet. Der Fehler ist hier https://drive.google.com/file/d/0B4vL9wnJulKoU09iSXFoWjFwaVU/view?usp=sharing. Ich habe auch die DB-Referenz in OnCreate oben auch gesetzt – TerribleCoder

+0

Hahah, was für ein lahmer Fehler. Seine 'users.push(). SetValue();' Da es eine Methode ist. ** Push ** ist wichtig, es generiert zeitbasierte Schlüssel. –