2017-03-01 3 views
0

So erstelle ich derzeit eine Methode, meine Firebase-Datenbank nach Benutzername zu durchsuchen. Meine users/ Struktur sieht wie folgt aus:Android Firebase-Suche nach Kind, das nicht onDataChange anruft

uid : { 
    displayName:value, 
    email:value, 
    otherUserData... 
} 

, die für die Suche funktioniert gut, wenn ich die Benutzer-ID des Benutzers haben ich suche, aber ich möchte, dass die Benutzer für andere Konten suchen können durch Account-Namen, weil Suche nach UID wäre lächerlich. Derzeit bin ich versucht, dies zu tun mit dieser Methode:

public void getUserByUsername(String username, final DatabaseCallback c) { 
    Log.d(TAG, "getByUsername"); 
    DatabaseReference userRef = FirebaseDatabase.getInstance().getReference("users"); 
    Query query = userRef.orderByChild("displayName").equalTo(username); 
    query.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot user : dataSnapshot.getChildren()) { 
       Log.d(TAG, "Found user " + dataSnapshot.getValue()); 
       User u = user.getValue(User.class); 
      } 
      Log.d(TAG, "No user found"); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.d(TAG, "Cancelled"); 
     } 
    }); 
} 

Wenn ich diese Methode aufrufen, die erste Log.d Anruf geht durch, aber keiner der Log.d Anrufe innerhalb OnDataChange gemacht bekommen. Gedanken?

+1

benutze query.addValueEvent .. anstelle von userRef.addValueEvent ... – Linxy

+0

* facepalm *. Funktioniert immer noch nicht – Jason

+0

isnide die for-Schleife, Sie wollen user.getValue (..) anstelle von dataSnapshot.getValue() – Linxy

Antwort

0

Das Problem war, dass mir die Erlaubnis zum Lesen verweigert wurde, und als Ergebnis onDataChange() wurde nicht aufgerufen, aber onCancelled() war. Ich entdeckte dies, indem ich einen Log.d() Anruf in meine onCancelled() Methode

Verwandte Themen