2016-08-09 2 views
1

Ich bin neu in Firebase .., wie man Daten aus Feuerbasis Datenbank

Ich versuche, weitere Informationen zuweisen über Benutzer in meiner Anwendung und als Name zu registrieren, Passwort, E-Mail, Bild sind für jeden Benutzer nicht genug. Also entschied ich mich, die UID als Schlüssel für jeden Benutzer zu verwenden und in der Datenbank zu speichern, dann kann ich später greifen. so, wenn der Benutzer Login andere Mal, wenn ich diese Daten abrufen möchten diese Daten werden nicht wieder geändert werden so setvalue() und fügen Zuhörer bei mir nicht funktionieren zu ändern, so codiert, um i zu tun, so

Query q = FirebaseDatabase.getInstance().getReference().child("users").equalTo(FirebaseAuth.getInstance().getCurrentUser().getUid()); 

was soll ich als nächstes machen ?!

die Führung doesnt sagen, irgendwelche Informationen über EqualTo(), wie Abfrage verwenden oder, wie Daten ohne

Zuhörer abrufen

dank

Antwort

3

Firebase Suchanfragen sind asynchron, gibt es keine „offizielle“ Weg zu tun, es synchron (ohne Rückrufe/Listener).

Warum ist es asynchron?

Da Firebase cloudbasiert ist, müssen Netzwerkaufrufe ausgeführt werden, um CRUD-Vorgänge auszuführen.

Jetzt, da Sie Ihr Query Objekt haben, können Sie einfach eine ValueEventListener anhängen und Ihre Daten in einer DataSnapShot erhalten.

Hinweis: addListenerForSingleValueEvent(listener) nur Abfragen einmal, im Gegensatz zu addValueEventListener(listener).

würde es so aussehen:

q.addValueEventListener(
     new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       // for example: if you're expecting your user's data as an object of the "User" class. 
       User user = dataSnapshot.getValue(User.class); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       // read query is cancelled. 
      } 
     }); 

für weitere Informationen zu diesem Bearbeiten Link

beziehen: Event Zuhörer zunächst einmal ausgelöst werden, dann ausgelöst, wenn die Daten, die Sie auf Änderungen sind abfragt.

+0

aber diese valueEventlistener wird nur dann trigered, wenn Daten richtig geändert werden? –

+0

Gute Frage, vergessen zu erwähnen, dass sie anfänglich einmal ausgelöst werden, dann werden sie ausgelöst, wenn die Daten, die Sie abfragen, bearbeitet werden. –

+1

Danke, das ist, was ich brauche –

2

Sie können einfach verwenden:

DatabaseReference usersRef = FirebaseDatabase.getInstance().getReference().child("users") 
Query q= usersRef.orderByKey().equalTo(FirebaseAuth.getInstance().getCurrentUser().getUid()); 

Dann einen Zuhörer auf Ihre Anfrage anhängen, um die Daten zu bekommen.

q.addValueEventListener(new ValueEventListener()){ } 

Ansonsten können Sie Ihre Daten auf diese Weise strukturieren:

users: 
|-uid1 : 
|-uid2 : 
|-uid3 : 

Auf diese Weise müssen Sie nur noch diesen Code verwenden, um die DatabaseReference Ihrer Benutzer abzurufen:

String uid= FirebaseAuth.getInstance().getCurrentUser().getUid(); 
DatabaseReference userRef = FirebaseDatabase.getInstance().getReference().child("users").child(uid); 
Verwandte Themen