ds97
ds97

Reputation: 107

Query firebase database and retrieve from 2 nodes

I want to retrieve from firebase database and I already have setup my model to put content in place. I succeeded to retrieve data from one single node but I am unable to do so where I need data from 2 nodes which I want to show it in say Recycler View. However, where I get the success is completely different fragment.

First, I will show you my code for retrieving data from just one node and it is working for me.

Here's the code which is working for one node in different fragment.

Working-Fragment

    private void updateArrayList() {        

    DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
    Query query = reference
            .child(getString(R.string.dbname_posts))
            .child(FirebaseAuth.getInstance().getCurrentUser().getUid());

    query.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            data.add(dataSnapshot.getValue(Userpost.class));
            adapter.notifyDataSetChanged();
        }

Above Code works perfectly. Now Non-Working Code which doesn't pull anything.

    private void updateArrayList() {

    DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
    Query query = reference
            .child(getString(R.string.dbname_posts)).child("profile_photo")
            .child(getString(R.string.dbname_user_account_settings))
            .child("profile_photo");

    query.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            data.add(dataSnapshot.getValue(Userpost.class));
            adapter.notifyDataSetChanged();
        }

This is a snapshot for firebase database Firebase Database Snapshot

I made the question as clear as possible on my end. Thank you all in advance.

Upvotes: 1

Views: 697

Answers (1)

Alex Mamo
Alex Mamo

Reputation: 138824

To get those values from a specific post, please use the following code:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference postIdRef = rootRef.child("posts").child(postId);
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String pheading = dataSnapshot.child("pheading").getValue(String.class);
        String user_id = dataSnapshot.child("user_id").getValue(String.class);
        Log.d("TAG", pheading + " / " + user_id);

        DatabaseReference ref = rootRef.child("user_account_settings").child(user_id);
        ValueEventListener valueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot ds) {
                String profile_photo = ds.child("profile_photo").getValue(String.class);
                Log.d("TAG", profile_photo);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {}
        };
        ref.addListenerForSingleValueEvent(valueEventListener);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
postIdRef.addListenerForSingleValueEvent(eventListener);

In which postId is the id of the post from which you want to extract the data.

Upvotes: 1

Related Questions