Firebase如何阻止DB中的特定节点

问题描述 投票:0回答:1

我有一个RecyclerView,每次在firebase数据库中更改某些内容时都会更新。在我的数据库中,我有“帖子”节点和里面的一些孩子,如“喜欢”,“评论”等。

我的loadRecyclerView函数:

    private void loadRecyclerViewData() {
    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (posts.size() > 0) {
                posts.clear();
            }

            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                Post post = ds.getValue(Post.class);
                //Getting a specific user's information (nickname purposes)
                    posts.add(0, post);

            }
            adapter.notifyDataSetChanged();
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

我的代码工作正常,并且Firebase中的每次更改都会更新一切,但我希望将监听器保留在除了新帖子之外的所有内容上(我向上滚动以刷新)。有任何想法吗 ??

java android firebase-realtime-database android-recyclerview
1个回答
0
投票

在此之前只获得帖子将需要一个在最新帖子结束的听众。所以像

databaseReference.orderByKey().endAt("key of newest post").addValueEventListener(...

要确定最新帖子的关键字,您可以为最新值附加一个监听器:

databaseReference.orderByKey().limitToLast(1).addValueEventListener(...

结合起来:

databaseReference.orderByKey().limitToLast(1).addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    String lastKey;

    for (String child: dataSnapshot.getChildren()) {
      lastKey = child.getKey();
    }

    databaseReference.orderByKey().endAt(lastKey).addValueEventListener((new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) {

        if (posts.size() > 0) {
            posts.clear();
        }

        for (DataSnapshot ds : dataSnapshot.getChildren()) {
            Post post = ds.getValue(Post.class);
            //Getting a specific user's information (nickname purposes)
                posts.add(0, post);

        }
        adapter.notifyDataSet...
© www.soinside.com 2019 - 2024. All rights reserved.