0

I need a function that has two parameters, (UserID and child key) it should return the value of child from firebase. I want something like this

public String getValue("user1", "Age")
{

//something to do

return age;

}

It should return value of the child.

This is how i'm doing:

private String getValue(String parent, final String child) {

    final String[] val = new String[1];

    database.getReference(parent).addListenerForSingleValueEvent(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {

                String key = snapshot.getKey();
                String value = ""+snapshot.getValue(String.class);

               if(key.equals(child))
               {
                   val[0] = value;
                   break;
               }
            }

        }

        @Override
        public void onCancelled(DatabaseError error) {

        }
    });


    return val[0];
}

This is how my database looks like there:

enter image description here

Mohamed Nageh
  • 1,963
  • 1
  • 19
  • 27
Aahil
  • 1
  • 1
  • You cannot return something that hasn't been loaded yet. check [this question](https://stackoverflow.com/questions/47847694/how-to-return-datasnapshot-value-as-a-result-of-a-method). – Mohamed Nageh Apr 30 '18 at 08:03

1 Answers1

0

Try this. I assume your database = FirebaseDatabase.getInstance().getReference("Users")

private String getValue(String parent, final String child) {

final String val = "";

database.child(parent).addListenerForSingleValueEvent(new ValueEventListener() {

    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
            val = (String) snapshot.child(child).getValue();
            break;
        }

    }

    @Override
    public void onCancelled(DatabaseError error) {

    }
});


return val;
}

Hope this helps

Android_K.Doe
  • 753
  • 1
  • 4
  • 11