2017-05-20 1 views
0

Ich habe eine Datenbank Firebase der folgenden Struktur:Wie kann ich Firebase abfragen, um Kinddaten in Android zu verwenden?

database 
    field1 
     -KkXawoXnSCInWXugbm- 
      email: "[email protected]" 
      firstName: "John" 
      lastName: "Smith" 
      phoneNumber: "123456" 
      password: "password1" 
    field2 
     -KkXanaeY4pWSl2Aqltt 
      email: "[email protected]" 
      firstName:"Jane" 
      lastName: "Doe" 
      phoneNumber: "5550123" 
      password: "password2" 

In meinem Android-Projekt habe ich einen Login-Bildschirm mit einer E-Mail und Passwort. Ich habe eine abstrakte Benutzerklasse mit zwei untergeordneten Klassen field1 und field2.

public abstract class User { 
    private String firstName; 
    private String lastName; 
    private String email; 
    private String phoneNumber; 
    private String userID; //this is the Firebase generated key as seen above 
    private String password; 
} 

Was ich tun möchte, ist die E-Mail verwenden, um den Knoten zu finden, dass die Benutzer darstellt und den Rest ihres Details zugreifen, so dass ich die in der Anmeldeseite eingegebenen Informationen überprüfen kann.

Ich bin ein Anfänger bei Firebase und habe ausgiebig nach einer Möglichkeit gesucht, dies zu tun, aber ich konnte dies nicht lösen. Jede Hilfe würde sehr geschätzt werden!

+0

Was '-KkXanaeY4pWSl2Aqltt' bedeutet, UUID? Es wäre besser, wenn es ist, sonst große Datenbank suchen wird langsam sein –

Antwort

0

Sie müssen dies nicht tun. Ich empfehle Ihnen, den Knoten von UID zu E-Mail address zu ändern. Auf diese Weise haben Sie alles, was Sie abfragen müssen. Aber weil Firebase . Symbol in dem Schlüssel nicht akzeptiert i recomand Sie die E-Mail-Adresse wie folgt Encript:

[email protected] -> Name @ email, com

Wie Sie wahrscheinlich sehen, Ich habe die . in , geändert. Um dies zu tun, empfehle ich Sie mit dieser Methode:

static String encodeUserEmail(String userEmail) { 
    return userEmail.replace(".", ","); 
} 

static String decodeUserEmail(String userEmail) { 
    return userEmail.replace(",", "."); 
} 

Ich hoffe, es hilft.

+0

Hey, tat ich dies und meine Datenbank ist jetzt von der folgenden Form: field1 E-Mail: "[email protected]" firstName: "John" lastName: "Smith" phoneNumber: "123456" Passwort: "password1" Aber dataSnapshot.getValue (field1.class) gibt jetzt einen Nullwert zurück, wie kann ich das beheben? –

+0

Wenn youd 'DatabaseReference' auf 'userId' gesetzt ist, müssen Sie die String-Klasse folgendermaßen verwenden:' String email = (String) dataSnapshot.child ("email"). GetValue() ' –

0

Wenn Sie in Felder für z. Feld1. Dann können Sie einfach die folgende Abfrage verwenden.

ref.child("field1") //only useful if you are having multiple nodes in field1 
    .orderByChild("email") 
    .equalTo("your_email_query") 

Mit diesem DataSnapshot können Sie weitere Details abfragen. Hoffe, das funktioniert !!

Verwandte Themen