Android - Firebase addChildEventListener触发器[重复]

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

这个问题在这里已有答案:

我正在为我的android项目使用Firebase。有一些我不明白的东西。我正在使用方法addChildEventListener,并且我知道这个方法应该在添加/删除/更改新子项时触发...由于某些原因当我的Activity加载时,此方法会触发。添加新孩子时不需要触发......?

    refToVideos.getReference(Params.VIDEOS).child(currentUser.getUid()).addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot snapshot, String s) {
            long countComments  = (long)snapshot.child(Params.COUNTCOMMENTS).getValue();
            int countComment = ((int) countComments);
            String frameURL  = (String)snapshot.child(Params.FRAMEURL).getValue();
            String genre  = (String)snapshot.child(Params.GENRE).getValue();
            long like  = (long)snapshot.child(Params.LIKES).getValue();
            int likes = ((int)like);
            String uploadDate  = (String)snapshot.child(Params.UPLOADDATE).getValue();
            String userProfile  = (String)snapshot.child(Params.USERPROFILE).getValue();
            String userUID  = (String)snapshot.child(Params.USERUID).getValue();
            String userName  = (String)snapshot.child(Params.USERNAME).getValue();
            String videoID  = (String)snapshot.child(Params.VIDEOID).getValue();
            String videoName  = (String)snapshot.child(Params.VIDEONAME).getValue();
            String videoURL  = (String)snapshot.child(Params.VIDEOURL).getValue();
            long view  = (long)snapshot.child(Params.VIEWS).getValue();
            int views = ((int)view);

            Video video = new Video(videoID,userUID,genre,videoName,videoURL,frameURL,userName,userProfile,likes,
                    views,countComment,uploadDate);
            videosList.add(video);
            if(adapter != null)
            adapter.notifyDataSetChanged();
        }

        @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) {

        }
    });
android firebase-realtime-database
1个回答
1
投票

来自documentation for onChildAdded

对于每个现有子项,将触发此回调一次,然后每次将新子项添加到指定路径时再次触发此回调。

因此,当您附加一个监听器时,它会立即为其侦听的位置中的任何现有子级调用其onChildAdded方法。这就是API的定义方式,您无法对其进行更改。

如果您只想了解在附加监听器之后添加的新子项,则必须在子节点中添加类似时间戳的内容,以确定它们是否为“新”。

另请参阅以前有关该主题的以下问题:

© www.soinside.com 2019 - 2024. All rights reserved.