How to read same value from nodes with different keys in Firebase real-time database?

Ron :

So I'm trying to display a list of comments under a post in a RecyclerView. However, I always run into the problem that I can't read the correct value because I don't know how to output the right path when the keys differ.

Can somebody help me?

Here's my structure in Firebase:

enter image description here

Here's my code so far:

 private void loadComments() {
        DatabaseReference commentRef = mRootReference.child("comments").child(pollid).getParent().child("comment");
        Query commentQuery = commentRef.limitToLast(mCurrentPage * TOTAL_ITEMS_TO_LOAD);
        commentQuery.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    Comment comment = ds.getValue(Comment.class);
                    commentList.add(comment);
                    mAdapter.notifyDataSetChanged();
                    mCommentList.scrollToPosition(commentList.size() - 1);
                }
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
Alex Mamo :

Seeing your database schema and your code, I assume that the pollid variable specified in your reference holds the value of LKwV ... IRyZ. So to display all the comments within this node, please use the following lines of code:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("comments").child(pollid).orderByChild("time");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<Comment> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Comment comment = ds.getValue(Comment.class);
            commentList.add(comment);
        }

        //Do what you need to do with your list
        //Pass the list to the adapter and set the adapter
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage());
    }
};
query.addListenerForSingleValueEvent(valueEventListener);

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=99842&siteId=1