Deep Chhowala
Deep Chhowala

Reputation: 109

fetch data from firebase having a randomly generated key

Below is the code that I am using to save value into firebase. It generates a random key for every value. (I want to save redundant data, so this method was necessary).

GenderOfNameHelperClass GONHC = new GenderOfNameHelperClass();
reference = FirebaseDatabase.getInstance().getReference().child("GenderOfName");
GONHC.setName(Name);
GONHC.setGender(Gender);
reference.push().setValue(GONHC);

This creates a structure as below:

db-ai-34201
-...GenderOfName
    -...M4oLyB1ADGLWGJG4EgR
        ...gender:"Female"
        ...name: "akira"

Now how can I fetch the data from this. I want to fetch the gender, when name is searched from my android UI.

Upvotes: 0

Views: 97

Answers (1)

Hasan Bou Taam
Hasan Bou Taam

Reputation: 4035

This is the listener to the GenderOfName node to extract data under the random keys:

ValueEventListener listener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
       for(DataSnapshot snapShot:dataSnapshot.getChildren() ){
       //these are the values of gender and name for every random key
       //in GenderOfName node

           String gender = snapShot.child("gender").getValue(String.class);
           String name = snapShot.child("name").getValue(String.class);              
       }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException(); // never ignore errors
    }
};

Finally attach the listener to your reference of that node to start listening to it

reference = FirebaseDatabase.getInstance().getReference().child("GenderOfName");
reference.addValueEventListener(listener);

UPDATE

you can always use a query to filter results:

instead of this:

reference = FirebaseDatabase.getInstance().getReference().child("GenderOfName");
reference.addValueEventListener(listener);

try this,it will give you a specific snapshot based on the name you need:

Query query = FirebaseDatabase.getInstance().getReference().child("GenderOfName").orderByChild("name").equalTo(theNameYouWant);
query.addValueEventListener(listener);

Upvotes: 2

Related Questions