2016-07-30 29 views
1

Ich habe Probleme mit einem Firebase-Aufruf, den ich vergleichen möchte, wenn der Wert einfach wahr oder falsch ist. Hier ist mein Versuch:Firebase getValue() Boolean nicht korrekt abrufen?

Firebase followingRef = currentUserPath.child("/following"); 
    followingRef.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(final DataSnapshot dataSnapshot, String s) { 
      firebaseRef.child("people/" + dataSnapshot.getKey()).addListenerForSingleValueEvent(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot snapshot) { 
        Boolean isFollowing = (Boolean) dataSnapshot.getValue(); 
        if(isFolloiwng) { 
         User user = snapshot.getValue(User.class); 
         user.setUserId(dataSnapshot.getKey()); 
         application.getFollowingRecyclerViewAdapter().add(user, application.getFollowingRecyclerViewAdapter()); 
        } 
       } 

       @Override 
       public void onCancelled(FirebaseError firebaseError) { 

       } 
      }); 
     } 
    ...//OnChildChanged,Moved,etc... no code in here 

Auf dem Weg ich in currentUserPath.child("following"); verweisen möge es wie folgt aussieht:

EDIT: Bild ersetzt mit aktuellen JSON:

"users" : { 
    "10206287838487450" : { 
     "following" : { 
     "10208425049208936" : true, 
     "107214969710378" : false, 
     "1789986447904975" : true 
     }, 
     "id" : "ae80f030-dea0-4909-944f-0e490847b6ab", 
     "name" : "Stephen", 
     "posts" : { 
     "-KN_oJAgTNJHwJbqY3qk" : true, 
     "-KN_oN9_Xmw5ULnBRYM7" : true, 
     "-KN_obYGug9Tdrzufbqc" : true, 
     "-KNefMk2nX0sOsUx0btx" : true 
     }, 
     "userId" : "10206287838487450" 
    }, 

    "people" : { 
    "10206287838487450" : { 
     "id" : "9e7ee838-a60a-4588-bc1c-93b98f74356d", 
     "name" : "Bob", 
     "userId" : "10206287838487450" 
    }, 
    "10208425049208936" : { 
     "id" : "fe6f97e3-0efb-4afb-a322-a1c586f75fb7", 
     "name" : "Jack", 
     "userId" : "10208425049208936" 
    }, 
    "107214969710378" : { 
     "id" : "ae80f030-dea0-4909-944f-0e490847b6ab", 
     "name" : "Rick", 
     "userId" : "107214969710378" 
    }, 
    "108421236267392" : { 
     "id" : "c72b35d9-380b-4552-8b05-7426d378fa14", 
     "name" : "Tommy", 
     "userId" : "108421236267392" 
    }, 
    "1112460595485164" : { 
     "id" : "383692f0-0aba-4d29-afb8-80beefe678c6", 
     "name" : "Stanley", 
     "userId" : "1112460595485164" 
    }, 
    "1789986447904975" : { 
     "id" : "1ae43255-c040-4b1e-959e-fcdf03e13a45", 
     "name" : "Link", 
     "userId" : "1789986447904975" 
    } 
    }, 

Ich bin sehr verwirrt weil ich jedes Mal, wenn ich versuche, dataSnapshot.getValue() zu einem Boolean zu werfen, bekomme ich immer isFollowing = true, die eindeutig nicht korrekt ist, weil in meinen Daten, gibt es nur 2 Werte, die wahr sind, wie oben gesehen, nicht alle 3. Die verwirrende Sache ist, wie komme ich kann die 0 nicht abrufenkorrekt. Ich habe versucht, Boolean isFollowing = (Boolean) dataSnapshot.getValue(Boolean.class) auch zu tun, aber das funktioniert nicht. Die Firebase-Dokumentation besagt, dass beim Abrufen von Daten eine eine Art von Daten sein kann, die wir abrufen können, aber ich kann nicht scheinen, sie korrekt abzurufen. Jede Hilfe wäre willkommen. Vielen Dank!

+0

Sie ein Bild von der JSON Baum in Ihrer Frage aufgenommen haben. Bitte ersetzen Sie dies durch den tatsächlichen JSON als Text, den Sie einfach erhalten, indem Sie in der Firebase-Datenbankkonsole auf die Schaltfläche "Exportieren" klicken. Da der JSON als Text durchsuchbar ist, können wir ihn einfach verwenden, um mit Ihren tatsächlichen Daten zu testen und sie in unserer Antwort zu verwenden, und im Allgemeinen ist dies nur eine gute Sache. –

+0

@FrankvanPuffelen Entschuldigung für den Mangel an Klarheit. Ich habe aufgenommen, wie mein JSON für diesen Datenbankaufruf aussieht. Danke, dass du mir geholfen hast, meinen Beitrag klarer zu machen! Irgendeine Idee, warum das für mich passieren könnte? – user1871869

+0

In dem JSON, den Sie gerade gepostet haben, ist der 'people' Knoten * unter * der' user' Knoten (also '/ users/people'). Ist das tatsächlich die Struktur, die Sie verwenden? –

Antwort

2

Werke für mich:

Firebase ref = new Firebase("https://stackoverflow.firebaseio.com/38671701/users"); 
    Firebase currentUserPath = ref.child("10206287838487450"); 
    Firebase firebaseRef = ref.child("10206287838487450"); 
    Firebase followingRef = currentUserPath.child("/following"); 
    System.out.println("Listening for children on "+followingRef); 
    followingRef.addChildEventListener(new ChildEventListenerBase() { 
       @Override 
       public void onChildAdded(final DataSnapshot dataSnapshot, String s) { 
        firebaseRef.child("people/" + dataSnapshot.getKey()).addListenerForSingleValueEvent(new ValueEventListener() { 
         @Override 
         public void onDataChange(DataSnapshot snapshot) { 
          Boolean isFollowing = (Boolean) dataSnapshot.getValue(); 
          System.out.println(dataSnapshot.getKey()+"="+isFollowing); 
         } 

         @Override 
         public void onCancelled(FirebaseError firebaseError) { 

         } 
        }); 
       } 
    }); 

Zuhören für Kinder auf https://stackoverflow.firebaseio.com/38671701/users/10206287838487450/following

10208425049208936 = true

107214969710378 = false

1789986447904975 = true

+0

Vielen Dank. Ich denke eigentlich hatte ich ein Problem in meiner IDE. Aus irgendeinem Grund wurde ein Stück Code nie erreicht und ich musste mein Projekt säubern/neu kompilieren, um es zu reparieren. Danke für Ihre Hilfe! – user1871869

0

so etwas wie dieses Versuchen:

Firebase followingRef = currentUserPath.child("following"); 
    followingRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
       for(DataSnapshot snapshot: dataSnapshot.getChildren()){ 
        Log.d(TAG, snapshot.getKey(); 
        Log.d(TAG, snapshot.getValue(); 

       //Do your operations here 
       } 
     } 
    } 
-2

Ändern einer Modellklasse

boolean Wert Um Boolean Wert