user1871869
user1871869

Reputation: 3367

Firebase getValue() not retrieving boolean correctly?

I am having trouble with a firebase call that I want to compare if the value is simply true or false. Here is my attempt:

   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

At the path I want to reference in currentUserPath.child("following"); it looks like this:

EDIT: Replace Picture with actual 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"
    }
  },

I'm very confused because every time I try to cast the dataSnapshot.getValue() to a Boolean, I always get isFollowing = true which is clearly not correct because in my data, there is only 2 values that are true as seen above, not all 3. The confusing thing is how come I can't retrieve the Boolean correctly. I have tried to do Boolean isFollowing = (Boolean) dataSnapshot.getValue(Boolean.class) also but this doesn't work. The Firebase documentation says that when retrieving data, a Boolean can be a type of data we can retrieve but I can't seem to retrieve it correctly. Any help would be appreciated. Thanks!

Upvotes: 2

Views: 10499

Answers (3)

aarifi
aarifi

Reputation: 9

Change a model class

boolean value To Boolean value

Upvotes: -2

Frank van Puffelen
Frank van Puffelen

Reputation: 599641

Works for me:

    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) {

                       }
                   });
               }
     });

Listening for children on https://stackoverflow.firebaseio.com/38671701/users/10206287838487450/following

10208425049208936=true

107214969710378=false

1789986447904975=true

Upvotes: 5

Veeresh Charantimath
Veeresh Charantimath

Reputation: 4719

Try something like this:

   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
              }
        }
    }

Upvotes: 0

Related Questions