我正在将Firebase用于我的android项目。
我有些不明白的地方。我正在使用方法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) {
}
});
答案 0 :(得分:1)
来自documentation for onChildAdded
:
此回调针对每个现有子级触发一次,然后每次将新子级添加到指定路径时再次触发。
因此,当您附加一个侦听器时,将针对其侦听位置中的所有现有子级“立即”调用其onChildAdded
方法。这是API的定义方式,您无法更改。
如果您只想听听在附加侦听器之后添加的新子级,则必须在子节点中添加类似时间戳的标识,以标识它们是否为“新”级。
还请参见有关该主题的先前问题: