2017-06-28 3 views
1

So habe ich jetzt etwa drei Stunden mit diesem Problem zu kämpfen.
Ich habe diese Benutzerklasse
dataSnapshot hat das Objekt, aber getValue() gibt Null zurück

public class User { 
private String user_id; 
private String userName; 
private long phoneNumber; 

public User() { 
} 

public User(String user_id, String userName, long phoneNumber) { 
    this.user_id = user_id; 
    this.userName = userName; 
    this.phoneNumber = phoneNumber; 
} 

Und ich möchte einige Beispiele dieser Klasse von Firebase-Datenbank holen ich diesen Code verwende, dies zu tun:
Datenbank Referenz;

User currentUser; 
DatabaseReference database = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference usersRef = database.child("users"); 

Abfragecode:

Query query = usersRef.orderByChild("user_id").equalTo(user_id); 
       query.addListenerForSingleValueEvent (new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         currentUser = dataSnapshot.getValue(User.class); 
} 

Komisch: Dieser Code einmal tatsächlich gearbeitet, aber ich habe einige Änderungen, die ich denke, und nun die getValue() gibt null;
dies ist meine Datenbank in Feuerbasis
enter image description here
und wenn ich die app debuggen die dataSnapshot enthält tatsächlich das Objekt I
enter image description here
gesucht bin aber Current wird ein Objekt sein, mit all seinen Bereichen null ;
enter image description here
irgendwelche ideen? Ich bekomme wirklich frustriert schon :( Vielen Dank im Voraus!

+0

Ihre Bilder sind gebrochen ... Können Sie uns zeigen, was die DataSnapshot Klasse sieht aus wie? – Aenadon

+0

@Aenadon Tut mir leid, ich habe sie bearbeitet, jetzt sind sie ok irgendwelche Ideen? – kisslory

Antwort

3

Sie müssen über dataSnapshot.getChildren( iterieren ... zum Beispiel

   for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) { 
        User user = childSnapshot.getValue(User.class); 
       } 
+0

das hat funktioniert! Danke, aber können Sie erklären, warum? Ich habe bereits einen Verweis auf den Knoten "Benutzer", warum gibt es das ganze zurück Branch? oder warum muss ich die Kinder dieses Benutzerknotens bekommen? vielleicht habe ich nicht verstanden, was dataSnapshot zurückgibt? Können Sie bitte ein wenig erklären? – kisslory

+0

es ist möglich für Fragen wie dass es mehrere Ergebnisse geben kann. –

+0

ich verstehe jetzt, aber ich dachte irgendwie, dass, wenn Sie einen Verweis auf einen Knoten haben und Sie nach einem Eintrag suchen, nur dieser Eintrag zurückgegeben wird (oder mehr, wenn es der Fall ist), aber von was ich verstehe, wird es das ganze zurückgeben " Benutzer "Knoten mit den Einträgen, die die Abfrage erfüllen – kisslory

Verwandte Themen