Tariq Mahmood
Tariq Mahmood

Reputation: 529

Query Specific Child Form Firebase

I have the structure in the image below and I want to get the whole data from ALL NODES querying by "amount". How can I do that query? How can I get amount value from all the nodes because all roots are different.

Database Snapshot**strong text**

I treid:

    zonesRef= FirebaseDatabase.getInstance().getReference("Database");
    zone1Ref = zonesRef.child("Payments");
    Query queryRef = zone1Ref.orderByChild("amount");
    queryRef.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            Toast.makeText(getApplicationContext(),s,Toast.LENGTH_SHORT).show();
        }

I have differnt users with different UserID. Here is code which i am usign to push data to firebase.

    currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser() ;
    UserID= currentFirebaseUser.getUid().toString();

    zonesRef= FirebaseDatabase.getInstance().getReference("Database");
    zone1Ref = zonesRef.child(Type);
    zone1NameRef = zone1Ref.child(UserID);

    Submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String Amount2= Amount.getText().toString();
            String Description2= Description.getText().toString().trim();


            String uniqueKey = zone1NameRef.push().getKey();
            UniqueKey= zone1NameRef.child(uniqueKey);

            UniqueKey.child("amount").setValue(Amount2);
            UniqueKey.child("date").setValue(currentDateTimeString);
            UniqueKey.child("description").setValue(Description2);
            UniqueKey.child("school").setValue(School);
        }
    });

Upvotes: 0

Views: 91

Answers (1)

Cyrille Con Morales
Cyrille Con Morales

Reputation: 967

Upon checking your data structure you have two keys before accessing the amount.

DatabaseReference getKeys;
    DatabaseReference Amounts;
    getKeys = FirebaseDatabase.getInstance().getReference("Database");
    Amounts = FirebaseDatabase.getInstance().getReference("Database");
    getKeys.child("Payments").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot snapshot:dataSnapshot.getChildren()){
                String key = snapshot.getKey();

                Amounts.child("Payments").child(key).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        for(DataSnapshot snapshot1:dataSnapshot.getChildren()) {
                            String amount = snapshot1.child("amount").getValue(String.class);
                            Toast.makeText(getApplicationContext(),amount,Toast.LENGTH_SHORT).show();
                        }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

Upvotes: 1

Related Questions