为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 Firebase 实时数据库中具有不同键的节点读取相同的值?

如何从 Firebase 实时数据库中具有不同键的节点读取相同的值?

胡子哥哥 2021-08-19 16:10:25
所以我试图在RecyclerView. 但是,我总是遇到无法读取正确值的问题,因为我不知道如何在键不同时输出正确的路径。有人可以帮助我吗?这是我在 Firebase 中的结构:到目前为止,这是我的代码: 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) {            }        });    }
查看完整描述

2 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

看到您的数据库架构和代码,我假设pollid您的参考中指定的变量包含LKwV ... IRyZ. 因此,要显示此节点内的所有评论,请使用以下代码行:


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);


查看完整回答
反对 回复 2021-08-19
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

尝试在您的查询中使用 orderByChild()。

Query commentQuery = commentRef.limitToLast(mCurrentPage * TOTAL_ITEMS_TO_LOAD).orderByChild("time");



查看完整回答
反对 回复 2021-08-19
  • 2 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号